Server.TransferRequest不发送传递的标头

时间:2016-08-10 14:37:14

标签: asp.net asp.net-mvc asp.net-mvc-3 asp.net-mvc-4 server.transfer

我的目标是使用Server.TransferRequest发送我自己的HTTP响应标头项。

我试图做那样的事情:

Response.Cache.SetCacheability(HttpCacheability.NoCache);
Response.Cache.SetNoStore();    

var headers = new NameValueCollection
{
    {"ErrorUrl", Context.Request.RawUrl},
    {"ErrorCode", code.ToString()}
};

Server.TransferRequest("~400.html", true, "GET", headers);

但是Chrome会在响应标题中显示我:

Accept-Ranges:bytes
Content-Length:573
Content-Type:text/html
Date:Wed, 10 Aug 2016 14:32:36 GMT
ETag:"a9d0dad4fbd1d11:0"
Last-Modified:Wed, 29 Jun 2016 11:46:10 GMT
X-Content-Type-Options:nosniff
X-Frame-Options:deny
X-SourceFiles:=?UTF-8?B?RDpcS0ZTXE1haW5cUHJvZHVjdFxLREMuVXNlcldlYlxLREMuVXNlcldlYi5XZWJSb2xlXHNyY1xWaWV3c1xlcnJvclxlbi1VU1w0MDMuaHRtbA==?=
X-XSS-Protection:1

请帮助我获得预期的标题。感谢

1 个答案:

答案 0 :(得分:0)

解决。我创建了类继承IHttpModule。我添加了事件OnPreSendRequestHeaders。我可以访问我发送的标题。

    public class HeadersModule : IHttpModule
    {
        public void Init(HttpApplication context)
        {
            context.PreSendRequestHeaders += OnPreSendRequestHeaders;
        }

        private void OnPreSendRequestHeaders(object sender, EventArgs e)
        {
            HttpContext currentContext = HttpContext.Current;
            string errorUrl = currentContext.Request.Headers["ErrorUrl"];
        }

        public void Dispose()
        {
        }
    }

我还在web.config文件中添加了名称。 (参见那里的例子https://msdn.microsoft.com/en-us/library/aa719858(v=vs.71).aspx

  

发生此问题是因为Server.TransferRequest使用以下命令执行指定URL的异步执行   指定的HTTP方法和标头。 (见https://msdn.microsoft.com/en-us/library/aa344901(v=vs.110).aspx

现在我可以使用errorUrl并根据需要修改响应