2016-07-28 21 views
5

Tôi khá mới đối với ASP.NET và MVC nói chung; Tôi đã chuyển một ứng dụng ASP.NET MVC sang ASP.NET MVC Core. Trong khuôn khổ cũ tôi đã có thể xử lý một HttpException cho các lỗi khét tiếng sau:Trang lỗi tùy chỉnh cho lỗi Http 404.13 ASP.NET Core MVC

HTTP Error 404.13 - Not Found

The request filtering module is configured to deny a request that exceeds the request content length.

Tôi biết tôi có thể làm tăng độ dài cho phép upload tối đa, mà hiện nay là 30MB theo mặc định, nhưng mục tiêu của tôi là để trình bày người dùng có trang lỗi thân thiện giải thích những gì vừa xảy ra, không tăng giới hạn cho phép.

On ASP.NET Tôi đã làm điều này với đoạn mã sau vào Global.asax của tôi:

private void Application_Error(object sender, EventArgs e) 
{ 
    var ex = Server.GetLastError(); 
    var httpException = ex as HttpException ?? ex.InnerException as HttpException; 
    if (httpException == null) return; 

    if (httpException.WebEventCode == WebEventCodes.RuntimeErrorPostTooLarge) 
    { 
     //handle the error 
     Response.Redirect("~/Error/UploadTooLarge"); //Redirect to my custom error page 

    } 
} 

tôi dường như không thể tìm thấy một sự thay thế cho điều này trong Asp.Net Lõi sau vài giờ nghiên cứu. Tôi tin rằng tôi sẽ cần phải cắm vào một số Middleware trong phương thức Startup.cs Configure của tôi để đạt được một trang lỗi tùy chỉnh để xử lý HttpException và chuyển hướng nó nhưng tôi thực sự bị mất về vấn đề này.

tôi đã quản lý để sử dụng thành công các middleware sau cho các trang lỗi tùy chỉnh cho các lỗi http như 404 - Not Found hoặc 403 - Forbiden bằng cách sử dụng sau đây trên phương pháp cấu hình của tôi:

app.UseStatusCodePagesWithReExecute("/Error/StatusCode{0}"); 

Cùng với một bộ điều khiển:

public class ErrorController : Controller 
{ 
    public IActionResult StatusCode404() 
    { 
     return View(viewName: "CustomNotFound"); 
    } 

    public IActionResult StatusCode403() 
    { 
     return View("CustomForbiden"); 
    } 
} 

Và chế độ xem tương ứng. Tuy nhiên, lỗi 404.13 (tải lên quá lớn) sẽ không được xử lý bởi phần mềm trung gian hiện tại của tôi. Tôi tin rằng IIS đang trình bày lỗi vì nó không được ứng dụng web xử lý.

Trả lời

0

Bạn là chính xác. IIS đang sửa lỗi trước khi nó đi vào đường ống của bạn. Tôi khuyên bạn nên thêm mô-đun httpErrors vào số web.config và trỏ nó vào một trang trên trang web.

<system.webServer> 
    <httpErrors errorMode="Custom" existingResponse="Replace"> 
    <remove statusCode="404" subStatusCode="13" /> 
    <error statusCode="404" 
      subStatusCode="13" 
      prefixLanguageFilePath="" 
      path="http://yourwebsite.com/path/to/page" 
      responseMode="Redirect" /> 
    </httpErrors> 
</system.webServer> 
+0

Đề xuất tuyệt vời cho MVC Core. Tôi đã gỡ bỏ phần mềm trung gian của tôi và thêm mô-đun 'httpErrors' và vì thuộc tính đường dẫn cho mỗi lỗi cho phép một giá trị như' path = "/ Error/CustomAction" 'Tôi có thể xử lý các trang lỗi/chế độ xem tùy chỉnh của tôi bằng Bộ điều khiển Lỗi. –

+0

đây là trường hợp có thể kết nối trực tiếp/từ xa với studio trực quan sẽ là tuyệt vời .. nếu không, đó là lần truy cập hoặc bỏ lỡ và liên tục phải lặp lại xuất bản/thử nghiệm và hy vọng điều tốt nhất là điểm đau thực sự. – razblack

+0

Tôi rất tò mò, điều gì sẽ xảy ra nếu bạn muốn xử lý tin nhắn cho khách hàng thông qua nói một hệ thống gầm gừ và bạn có chuyển hướng này xảy ra. – razblack

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