0

我的目标是使用 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

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

4

1 回答 1

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 使用指定的 HTTP 方法和标头执行指定 URL 的异步执行。(参见https://msdn.microsoft.com/en-us/library/aa344901(v=vs.110).aspx

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

于 2016-08-11T09:03:30.673 回答