2012-04-24 95 views
0

根據條件,我想從我的Asp.net頁面發回一個400(實際上是除了200(Status OK)以外的任何代碼)錯誤代碼。編程的Http響應代碼

if(Failed) 
{ 
Context.Response.TrySkipIisCustomErrors = true; 

Context.Response.ClearContent(); 

Context.Response.StatusCode = (int)HttpStatusCode.BadRequest; 

HttpContext.Current.ApplicationInstance.CompleteRequest(); 

Context.Response.End(); 
} 

我在PageLoad方法中有此代碼。但不幸的是,如果我有上面的if語句(是If語句中的代碼被執行,在調試看到這一點)

但這不工作時,我

Context.Response.TrySkipIisCustomErrors = true; 

Context.Response.ClearContent(); 

Context.Response.StatusCode = (int)HttpStatusCode.BadRequest; 

HttpContext.Current.ApplicationInstance.CompleteRequest(); 

Context.Response.End(); 

直接在整個代碼放置沒有任何其他代碼的PageLoad在這些行之前,我找回響應代碼,這很奇怪。

我也嘗試使用HTTPModule,但也一樣。

我不明白爲什麼在設置響應代碼之前執行任何其他代碼行之前沒有設置響應,有任何人遇到這種情況。

但我確實收到了回覆內容。

沒關係

沒關係。

有兩個原因,這個問題:

一個是本地主機didnt拋出所需的錯誤的HttpRequest狀態代碼,並在部署到IIS網站服務器上,一切都看起來很不錯。

其次是我正在自動化測試,以編程方式使用HttpWebRequest進行檢查。對於請求對象,我已經忘記發送請求頭信息,因爲我正在根據請求頭進行判斷。

總而言之,代碼行很棒。

回答

0

我建議你檢查變量「Failed」是否設置正確。爲了調試的目的,只是嘗試將if條件改爲if(true)
我猜測可能存在您在條件語句中使用的變量的問題