0

我的目標是使用Server.TransferRequest發送自己的HTTP響應頭文件。Server.TransferRequest不發送傳遞的頭文件

我試圖做這樣的事情:

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 

請幫助我獲得預期的頭。謝謝

回答

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和修改響應,我想