2011-06-28 50 views
5

在ASP.NET MVC 3中創建自定義錯誤頁面的最佳方式是什麼?我特別感興趣的是一個404錯誤,但也是403,等等。我是MVC框架的新手,傳統上我來自PHP背景,但我很快就學會了。如何在ASP.NET MVC 3中創建自定義404錯誤頁面?

我沒有發佈這個問題之前,我研究過這個鏈接來: Custom error pages on asp.net MVC3

這一解決辦法似乎很簡單,雖然當我試圖實現我的機器上,我得到下面的行了一個問題:一個IController errorsController = new ErrorsController();在Application_Error()函數內部。它說:「類型或命名空間名稱‘ErrorsController’找不到(是否缺少using指令或程序集引用?」。

預先感謝您的幫助,您可以提供。

+0

可能重複[如何正確處理ASP.NET MVC中的404?](http://stackoverflow.com/questions/619895/how-can-i-properly-handle-404-in-asp-net -mvc) –

回答

15

您應該配置在你的web.config文件

<httpErrors> 

部分下

<system.webServer> 

節組。

請參閱這篇文章:

http://www.iis.net/ConfigReference/system.webServer/httpErrors

此外,您可以使用,你在你的問題鏈接錯誤控制,但是初始流量應該由IIS進行管理。通過本節你可以指示IIS它應該執行由你的控制器管理的URL。

另請注意,在您的控制器的操作中正確的Response.Status屬性字符串作爲建議的解決方案返回「200 OK」,這可能會讓瀏覽器感到困惑。例如

public class ErrorsController : Controller 
{ 
    public ActionResult NotFound() 
    { 
     Response.Status = "404 Not Found"; 
     return View(); 
    } 

    public ActionResult ServerError() 
    { 
     byte[] delay = new byte[1]; 
     RandomNumberGenerator prng = new RNGCryptoServiceProvider(); 

     prng.GetBytes(delay); 
     Thread.Sleep((int)delay[0]); 

     IDisposable disposable = prng as IDisposable; 
     if (disposable != null) { disposable.Dispose(); } 
     Response.Status = "500 Internal Server Error"; 
     return View(); 
    } 

} 

配置例子:

<httpErrors defaultPath="/error.htm" errorMode="Custom" existingResponse="Replace" defaultResponseMode="ExecuteURL"> 
     <remove statusCode="500" subStatusCode="-1" /> 
     <remove statusCode="404" subStatusCode="-1" /> 
     <error statusCode="500" path="/errors/servererror/" responseMode="ExecuteURL" /> 
     <error statusCode="404" path="/errors/notfound/" responseMode="ExecuteURL" /> 
    </httpErrors> 

您可以使用 「subStatusCode」 屬性控制404.3等。

相關問題