交叉请求不能正确返回文件

时间:2015-01-13 15:00:45

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

我想通过代理脚本向我的后端服务器发送查询。但它没有正确返回文件。

public class HttpWebRequestRunner : IWebRequestRunner
{
    public HttpWebResponse Run(string backendUri)
    {
        HttpWebRequest request = (HttpWebRequest)WebRequest.Create(backendUri);

        HttpWebResponse response = (HttpWebResponse) request.GetResponse();

        return response;
    }
}

我的后端服务器已关闭互联网,所以我发送参数我的Asp.Net Mvc应用程序。它将请求发送到后端服务器。

后端服务器正在返回此请求的文件:http://10.0.2.1/Employee/CV/1445

Inmy mvc控制器我用这个:

 public class PersonController : Controller
    {
        public ActionResult GetCv(int id)
        {
            HttpWebResponse response = new HttpWebResponse();

            HttpWebResponse webResponse = response.run("http://10.0.2.1/Employee/CV/1445");

            context.HttpContext.Response.ContentType = wbResponse.ContentType;

            webResponse.GetResponseStream().CopyTo(context.HttpContext.Response.OutputStream);

            // write result...
        }       
    }

现在

如果我向浏览器的后端发送请求此网址http://10.0.2.1/Employee/CV/1445,则会返回 1445.pdf 文件

但如果我通过代理应用程序发送请求,请http://localhost:22414/Person/GetCv/1445 这将返回名为 file 但不是pdf扩展名的文件。

2 个答案:

答案 0 :(得分:1)

您还需要中继Content-Disposition HTTP标头。

答案 1 :(得分:1)

文件名在标题信息中。 webResponse.Headers["Content-Disposition"]。所以你必须这样使用:

 context.HttpContext.Response.Headers.Set(
     "Content-Disposition", 
     webResponse.Headers.Get("Content-Disposition"));