2011-06-28 43 views
5

cách tốt nhất để tạo các trang lỗi tùy chỉnh trong ASP.NET MVC 3 là gì? Điều tôi đặc biệt quan tâm là lỗi 404, nhưng cũng là 403 và các lỗi khác. Tôi mới vào khuôn khổ MVC, theo truyền thống tôi đến từ một nền tảng PHP, nhưng tôi đang học một cách nhanh chóng.Làm thế nào để tạo các trang lỗi 404 tùy chỉnh trong ASP.NET MVC 3?

tôi đã làm nghiên cứu của tôi trước khi đăng câu hỏi này và đã xem qua link này: Custom error pages on asp.net MVC3

Đó giải pháp có vẻ đơn giản mặc dù khi tôi cố gắng thực hiện điều đó trên máy tính của tôi, tôi nhận được một vấn đề với các dòng sau: IController errorsController = new ErrorsController(); bên trong hàm Application_Error(). Nó nói "Loại hoặc namespace tên 'ErrorsController' không thể được tìm thấy (là bạn thiếu một chỉ thị sử dụng hoặc tham khảo một hội?".

Cảm ơn bạn trước sự giúp đỡ bạn có thể cung cấp.

+0

bản sao có thể có của [Làm thế nào tôi có thể xử lý đúng 404 trong ASP.NET MVC?] (Http://stackoverflow.com/questions/619895/how-can-i-properly-handle-404-in-asp-net -mvc) –

Trả lời

15

Bạn nên cấu hình nhóm

<httpErrors> 

phần dưới

<system.webServer> 

phần trong tập tin web.config của bạn.

Vui lòng tham khảo bài viết này:

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

Ngoài ra bạn có thể sử dụng bộ điều khiển lỗi mà bạn liên kết trong câu hỏi của bạn, tuy nhiên dòng chảy ban đầu nên được quản lý bởi IIS. Bởi phần này bạn có thể hướng dẫn IIS rằng nó nên thực hiện các url được quản lý bởi bộ điều khiển của bạn.

Cũng xin lưu ý về chuỗi thuộc tính Response.Status thích hợp trong hành động của bộ điều khiển của bạn khi giải pháp được đề xuất trả về "200 OK" có thể gây nhầm lẫn cho trình duyệt. Ví dụ

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(); 
    } 

} 

Cấu hình ví dụ:

<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> 

Bạn có thể kiểm soát 404,3 và khác sử dụng "subStatusCode" thuộc tính.

Các vấn đề liên quan