【问题标题】:Retrieving website content and returning it in ASP.NET MVC 4检索网站内容并在 ASP.NET MVC 4 中返回
【发布时间】:2013-02-22 19:11:25
【问题描述】:

我有两台服务器。一个是私有服务器,我不希望用户可以直接访问它,另一个是公共可以访问的服务器。 我可以通过以下 URL 访问我的私人服务器:http://xxx.xx.xxx.xxx/

我想做的是创建某种“代理”,只用于我的私人服务器。我的想法是去:http://www.domain.com/server/path/here/something 这个页面应该显示http://xxx.xx.xxx.xxx/path/here/something的内容

我有这个工作,但我可以让它工作的唯一方法是将内容作为字符串返回,然后浏览器将解释 HTML。 这适用于返回 HTML 内容的页面,但如果我想直接访问 .gif 或任何类型的文件,它就不起作用(当然)。

这是我目前拥有的代码:

    public string Index(string url)
    {
        string uri = "http://xxx.xx.xxx.xxx/" + url;

        HttpWebRequest request = (HttpWebRequest)WebRequest.Create(uri);
        request.Method = "GET";
        HttpWebResponse response = (HttpWebResponse)request.GetResponse();

        StreamReader responseStream = new StreamReader(response.GetResponseStream());

        string resultado = responseStream.ReadToEnd();

        return resultado;
    }

如何更改我的代码以使其适用于任何文件?

【问题讨论】:

  • 你不能使用真正的代理来实现这个吗??
  • 不知道有没有更好的办法。我只想从我的私人服务器获取内容(使用我之前解释过的 URL),并将其显示在我的公共服务器上。
  • 公共服务器可以直接访问私有服务器上的文件吗?还是必须是网络请求?
  • 它不能直接访问它们。它需要是一个网络请求。

标签: c# .net asp.net-mvc proxy


【解决方案1】:

您可以检查响应内容类型并根据它执行您需要的操作。 您需要更改您的操作以返回 ActionResult 而不是字符串。

if(response.ContentType.Equals("text/html"))
{
 //show html stuff
 return Content(resultado);

}
else if(response.ContentType.Contains("image/"))
{

   var ms = new MemoryStream();
    responseStream.BaseStream.CopyTo(ms);

    var imageBytes = ms.ToArray();
  return File(imageBytes, response.ContentType);
}

【讨论】:

  • 问题是我正在返回一个字符串。我应该返回另一种类型吗?
  • @FedeLerner 这取决于。你到底在哪里返回字符串?谁/什么是这种返回类型的消费者?
  • 嗯,它是一个 ASP.NET MVC 4 (4.0 .NET Framework) 应用程序,因此字符串会返回给客户端,您在我的问题中看到的 Index 函数位于控制器上。我直接返回 responseStream.ReadToEnd() 的字符串,这就是浏览器客户端获取 HTML 并解释它的方式。我想这不是最好的方法,但这是我让它工作的唯一方法(不幸的是,它仅限于 HTML)。
  • @FedeLerner 在这种情况下,您可以让您的操作返回一个 ActionResult(因此它可以返回一个 Content(字符串)或 FileResult(字节 [])。他们是否测试一下 ContentType 然后返回适当的内容。我已经更新了我的答案
  • @FedeLerner 看看我的回答。我已经对其进行了修改以适应您的上下文,您会注意到它使用了您的变量。我检查内容类型并返回 Content(string) 或 FileResult(它是 ActionResult 的子类)
【解决方案2】:

您必须编写一个系统,从 resultado 中读取您的 html 或图像,并根据您需要控制您的 Url 的 PLUS 做一些事情。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多