Tôi có một số mã cơ bản để xác định lỗi trong ứng dụng MVC của mình. Hiện tại trong dự án của tôi, tôi có một bộ điều khiển được gọi là Error
với các phương thức hành động HTTPError404()
, HTTPError500()
và General()
. Tất cả đều chấp nhận tham số chuỗi error
. Sử dụng hoặc sửa đổi mã bên dưới. Cách tốt nhất/thích hợp để chuyển dữ liệu đến bộ điều khiển Lỗi để xử lý là gì? Tôi muốn có một giải pháp mạnh mẽ nhất có thể.ASP.NET MVC Lỗi tùy chỉnh xử lý Application_Error Global.asax?
protected void Application_Error(object sender, EventArgs e)
{
Exception exception = Server.GetLastError();
Response.Clear();
HttpException httpException = exception as HttpException;
if (httpException != null)
{
RouteData routeData = new RouteData();
routeData.Values.Add("controller", "Error");
switch (httpException.GetHttpCode())
{
case 404:
// page not found
routeData.Values.Add("action", "HttpError404");
break;
case 500:
// server error
routeData.Values.Add("action", "HttpError500");
break;
default:
routeData.Values.Add("action", "General");
break;
}
routeData.Values.Add("error", exception);
// clear error on server
Server.ClearError();
// at this point how to properly pass route data to error controller?
}
}
Khi bạn nói "hãy cẩn thận của Looping" chính xác những gì bạn có ý nghĩa ?Có cách nào tốt hơn để xử lý loại chuyển hướng lỗi này (giả sử nó là một hệ thống được sử dụng nhiều)? – aherrick
Bằng cách lặp lại, tôi có nghĩa là khi bạn gặp lỗi trong trang lỗi, bạn sẽ bị chuyển hướng đến trang lỗi của bạn một lần nữa ... (ví dụ: bạn muốn đăng nhập lỗi trong cơ sở dữ liệu và nó bị hỏng). – andrecarlucci
Chuyển hướng trên các lỗi đi ngược lại với kiến trúc của web. URI sẽ vẫn giữ nguyên khi máy chủ phản hồi mã trạng thái HTTP chính xác để khách hàng biết được ngữ cảnh chính xác của lỗi. Thực hiện HandleErrorAttribute.OnException hoặc Controller.OnException là một giải pháp tốt hơn. Và nếu những thất bại đó, hãy làm một Server.Transfer ("~/Error") trong Global.asax. –