2011-02-11 20 views
18

我想知道是否有可能從頁面內拋出404錯誤(後面的代碼)?或者甚至可能拋出任何其他類型的錯誤頁面,如408(超時)或401(需要身份驗證)?可能在ASP.Net頁面內引發404錯誤?

注意:我不只是想讓頁面返回狀態代碼404,我希望它使用ASP.Net(或我的CustomErrors)404錯誤頁面。

像這樣的事情在後面的代碼:

if(id>10){ //if id is greater than 10, then it doesn't exist here 
    throw 404Error(); 
} 

回答

29

你可以拋出一個HttpException並設置相應的狀態代碼:

throw new HttpException(404, "Not found"); 

它還將與其他狀態碼工作。關於401的評論:您可能知道ASP.NET MVC何時檢測到此代碼,它會自動將您重定向到登錄頁面,併爲401狀態代碼獲取自定義錯誤頁面可能是一個真正的PITA。

+0

嗯使用自定義錯誤頁時要好得多。如果在CustomErrors關閉時引發此異常,它是否會顯示帶有堆棧跟蹤的標準ASP.Net異常頁面? – Earlz 2011-02-11 22:08:46

+2

@Earlz,如果`customErrors =「Off」`你可能會得到一個YSOD。 – 2011-02-11 22:09:56

17

一個更好的方法是:

'Throws a 404 Not found: 
Response.Clear() 
Response.StatusCode = 404 
Response.End() 

沒有必要拋出一個異常,上述工程在web.config