내 앱이 ASP.NET Core RC2
이고, 상태 코드와 예외 처리기 미들웨어가 어떻게 작동하는지 혼란 스럽습니다.예외가 다른 페이지로 리디렉션되는 이유는 무엇입니까?
내 응용 프로그램은 다음 미들웨어로 구성됩니다. 그것은 반환해야 볼
app.UseStatusCodePagesWithReExecute("/Error/Status/{0}");
app.UseExceptionHandler("/Error/ServerError");
컨트롤러 핸들 :
[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();
}
내가 알 수없는 URL로 이동하면 상태 액션에서 예상대로이 404 page
를 반환합니다.
예외를 throw하는 작업으로 이동하면 /Error/ServerError
으로 이동하고 상태 작업에서는 500 page
이 아닙니다. 나는 그것이 상태 액션에서 500 page
를 반환합니다 StatusCodeResult(500);
을 반환 조치로 이동하면
public IActionResult ThrowException()
{
throw new Exception();
}
. 나를 혼란 무엇
[HttpGet]
public IActionResult Error500()
{
return new StatusCodeResult(500);
}
콘솔이 모두 결과가 500 (Internal Server Error)
하지만 그들이 미들웨어를 기반으로 다른 페이지로 이동합니다 반환하는 방법에 따라 반환 것을 알 수 있다는 것입니다. 왜 이런 일이
입니까?
나는 잘 모르겠지만, 난'ASPNET/Diagnostics'을 검토하고 내가'StatusCodePagesMiddleware'의 조건을 다음 보았다 : 당신은 다음과 같은 것을 할 수있는'경우 (context.Response.HasStarted || ...) {return;}'. 또한 'ExceptionHandlerMiddleware' 컨텍스트에서. Response.OnStarting (_clearCacheHeadersDelegate, context.Response); 나는'StatusCodePagesMiddleware'가 상태 코드를 처리하기 전에 Response이 이미'ExceptionHandlerMiddleware'에 의해 시작되었다고 생각합니다. –