Ứng dụng của tôi đang chạy ASP.NET Core RC2
và tôi nhầm lẫn về cách mã trạng thái và phần mềm trung gian xử lý ngoại lệ hoạt động.Tại sao chuyển hướng ngoại lệ sang các trang khác nhau?
Ứng dụng của tôi được định cấu hình với phần mềm trung gian sau.
app.UseStatusCodePagesWithReExecute("/Error/Status/{0}");
app.UseExceptionHandler("/Error/ServerError");
Cụm tay lái điều khiển mà xem nó sẽ trả về:
[HttpGet]
public IActionResult Status(int id)
{
switch (id)
{
case 404:
return View("404");
case 400:
return View("400");
case 500:
return View("500");
default:
return View("501");
}
}
[HttpGet]
public IActionResult ServerError()
{
return View();
}
Khi tôi hướng đến một URL chưa biết nó sẽ trả lại 404 page
như mong đợi từ các hành động Trạng thái.
Khi tôi điều hướng đến một hành động ném một ngoại lệ, nó sẽ điều hướng đến /Error/ServerError
chứ không phải là 500 page
từ hành động Trạng thái.
public IActionResult ThrowException()
{
throw new Exception();
}
Nếu tôi hướng đến một hành động mà trả StatusCodeResult(500);
nó sẽ trả lại 500 page
từ hành động Trạng thái.
[HttpGet]
public IActionResult Error500()
{
return new StatusCodeResult(500);
}
gì confuses me là giao diện điều khiển cho thấy rằng cả hai kết quả trở 500 (Internal Server Error)
nhưng tùy thuộc vào cách thức chúng được trả về họ sẽ hướng đến một trang khác nhau dựa trên các middleware.
Tại sao điều này?
Tôi không chắc chắn, nhưng tôi xem xét 'aspnet/Diagnostics' và tôi thấy sau điều kiện trong 'StatusCodePagesMiddleware':' if (context.Response.HasStarted || ...) {return;} '. Cũng trong 'ExceptionHandlerMiddleware'' context.Response.OnStarting (_clearCacheHeadersDelegate, context.Response); '. Tôi nghĩ trước khi 'StatusCodePagesMiddleware' đã xử lý mã trạng thái, Response đã được bắt đầu bởi' ExceptionHandlerMiddleware'. –