2014-01-23 37 views
-1

我試圖將401響應轉換爲重定向而不更改響應代碼。下面的代碼工作之前,但我做了一些擺弄,以找出其他一些問題,現在這是行不通的,我不明白爲什麼。無法更改EndRequest事件中的響應內容

真的讓我驚訝的是,當我遍歷代碼時,它碰到了Response.Output.Write行並且不會引發任何錯誤(我也嘗試了Response.Write),但是當瀏覽器接收到響應,正常的IIS錯誤頁面顯示出來。

任何想法爲什麼IIS不會使用我給它的響應內容?

這是Server 2008 R2上的IIS7。網站在.NET 4.0中運行(嘗試4.5,發生同樣的事情)。

這是我在Global.asax文件的代碼:

protected void Application_EndRequest(Object sender, EventArgs e) { 
     if (Request.Url.ToString().Contains("WinLogin.aspx") && HttpContext.Current.Response.StatusCode == 401) { 
      HttpContext.Current.Response.ClearContent(); 

      //If Windows authentication failed, redirect to the forms login page 
      if (String.IsNullOrEmpty(Request.QueryString["ReturnUrl"])) { 
       HttpContext.Current.Response.Output.Write(@"<html><head><script language='javascript'>self.location='/Login.aspx?ReturnUrl=/';</" + "script></head><body>401 Unauthorized</body></html>"); 
      } else { 
       HttpContext.Current.Response.Output.Write(@"<html><head><script language='javascript'>self.location='/Login.aspx?ReturnUrl=" + Request.QueryString["ReturnUrl"] + "';</" + "script></head><body>401 Unauthorized</body></html>"); 
      } 
     } 
    } 

更新:我想通了,這個問題只能從遠程機器發生(我用的是不是加入域測試虛擬機)。它從我的本地機器正常工作。我會從這個角度去做一些在線搜索。

回答

0

好吧,我已經知道了。我必須在web.config中啓用詳細的IIS錯誤。缺省值爲DetailedLocalOnly。

<httpErrors errorMode="Detailed" /> 

我曾嘗試過customErrors標籤,但這隻適用於ASP.NET錯誤,所以它沒有任何效果。