2011-10-11 52 views
3

僞造HTTP狀態代碼,這是一個很奇怪的問題,但我想測試自定義錯誤的web.config設置,例如:在IIS/.NET測試

<customErrors mode="On"/> 
    <error statusCode="500" redirect="500.html"/> 
    <error statusCode="500.13" redirect="500.13.html"/>   
    </customErrors> 

反正我可以創建一個頁面或攔截global.asax Application_BeginRequest方法中的請求,該方法可以僞造響應以發送到瀏覽器,即設置一個500.13 HTTP錯誤狀態,告訴IIS使用Web.Config中定義的500.13.html頁面。

理想情況下,我想要做一些事情,比如創建一個頁面,該頁面需要返回的狀態代碼的查詢字符串值。 FakeRequest.html?errorStatus=500.13以便我們的測試人員可以確保爲各種錯誤返回適當的頁面。

回答

3

試着這麼做:

protected void Page_Load(object sender, EventArgs e) 
    { 
     var rawErorStatus = HttpContext.Current.Request.QueryString.Get("errorStatus"); 

     int errorStatus; 
     if (int.TryParse(rawErorStatus, out errorStatus)) 
     { 
      throw new HttpException(errorStatus, "Error"); 
     } 
    } 

發現這個在以下頁面:http://aspnetresources.com/articles/CustomErrorPages

+0

這就是票!這似乎是爲我做的伎倆!謝謝保羅! – Danjuro

0

這不會對所有的工作,但你可以割肉出來...緩存設置非常重要,否則最後的代碼,他們可以嘗試通過瀏覽器等

創建一個基本的頁面,例如緩存「FakeError.aspx」:

<html xmlns="http://www.w3.org/1999/xhtml" > 
<script runat="server" language="c#"> 

    protected void Page_Load(object sender, EventArgs e) 
    { 
    Response.Cache.SetCacheability(HttpCacheability.NoCache); 
    Response.StatusCode = Convert.ToInt32(Request.QueryString["code"]); 
    Response.End(); 
    } 

</script> 
</html> 

然後打它......

就像我說的,不是所有的工作,但看你如何去。

對於狀態代碼,請參閱http://msdn.microsoft.com/en-us/library/aa383887(VS.85).aspx

+0

感謝保羅,可惜這並不完全符合我的需要。回到頁面加載的響應是正確的,但它不會被IIS攔截以使用web.config中定義的頁面。謝謝,丹 – Danjuro

+0

有趣!這答案談到配置IIS和ASP.NET級別... http://stackoverflow.com/questions/615829/iis-404-custom-error-not-working-as-expected/616467#616467 –

+0

嗨保羅,感謝這一點,但這已經是我所做的(在我的問題中提到)。 web.config已經設置爲處理錯誤狀態頁面,並且我想僞造一個請求,以便IIS強制使用web.config中定義的頁面進行測試。再次感謝 – Danjuro