ASP.NET MVC 5에서 사용자 정의 오류 페이지를 구성하려고했지만 거의 성공하지 못했습니다. http://benfoster.io/blog/aspnet-mvc-custom-error-pagesMVC 5의 사용자 정의 오류 페이지
의 Web.config customerrors
<customErrors mode="On" defaultRedirect="~/500.aspx" redirectMode="ResponseRewrite">
<error statusCode="401" redirect="~/401.aspx" />
<error statusCode="403" redirect="~/401.aspx" />
<error statusCode="404" redirect="~/404.aspx" />
</customErrors>
내가 필터 설정에서 HandleErrorAttribute
을 제거한의 Web.config httpErrors
<httpErrors errorMode="Custom" >
<remove statusCode="401" />
<error statusCode="401" path="401.html" responseMode="File" />
<remove statusCode="403" />
<error statusCode="403" path="401.html" responseMode="File" />
<remove statusCode="404" />
<error statusCode="404" path="404.html" responseMode="File"/>
<remove statusCode="500" />
<error statusCode="500" path="500.html" responseMode="File" />
</httpErrors>
:이 작업을 수행하려면
는,이 가이드를 따라왔다. 이 설정으로
, 나는 다음과 같은 결과를 얻을 : 존재하지 않는 정적 자원에
찾아보기를
예 : http://my.website.com/fakeresource.htm
이것은 구성 정적 404.htm 파일 결과 httpErrors 섹션.
브라우저 주소 표시 줄에 URL이 보존됩니다.
404 상태 코드가 올바르게 설정되었습니다. 나쁜 노선찾아
예 : 일치하는 경로를 찾을 수없는 경우HttpException
에서 http://my.website/realcontroller/fakeaction
이 결과가 발생된다.
404.aspx 페이지가 표시됩니다.
URL은 브라우저 주소 표시 줄에 보존됩니다.
404 상태 코드가 올바르게 설정되었습니다.올바른 노선 검색,하지만 데이터베이스 리소스에 대한 잘못된 ID로는
예 : http://my.website.com/realcontroller/realaction/22
(22 존재하지 않는 자원의 ID이며, 동작은HttpNotFound()
방법을 반환합니다. 의 httpErrors 섹션으로 구성 정적 404.htm 파일에
이 발생합니다. URL은 브라우저 주소 표시 줄
404 상태 코드가 올바르게 설정되어 있습니다.
에 보존되어
내가HttpException(404, "Not Found")
대신 O를 던질 경우HttpNotFound()
를 이용하여 F, I는 함께 ModelState를 검사 조치를 모두 작업 올바르게
그러나의 Web.config 이러한 구성을 사용 customErrors
예외 & 무단 요청 또한
에서 정의 된 (404)를 얻을 ModelSate.IsValid
또는 ModelState.AddModelError("InputName", "Error Message");
을 사용하여 오류를 추가하면 400 개의 잘못된 요청이 발생합니다.여기
IE
크롬 대신
, 내가 점점되어야하는 것은 원래보기입니다 검증 메시지는 fa 다음 입력 옆에 표시됩니다. ile 검증.
web.config에서 httpErrors
섹션을 제거하면 문제가 해결되지만 더 이상 사용자 지정 IIS 오류 페이지가 표시되지 않습니다.
나는 existingResponse
속성의 모든 옵션을 httpErrors
에 시도했지만 옵션이 다르면 오류 페이지 또는 ModelState
유효성 검사가 중단됩니다.
마지막으로 설정을 시도한 Response.TrySkipIisCustomErrors = true;
및이 테스트중인 작업의 문제를 해결하려면 나타납니다.
그러나이 말은 ModelState
을 사용하는 모든 동작에서이 속성을 설정해야한다는 것을 의미하며, 올바르게 작동하지 않습니다.
내가 뭘 잘못하고 있니?
업데이트 이 프로젝트가 프로젝트인지 테스트하려면 VS2012에서 새 프로젝트를 만들고 동일한 오류 페이지를 구성했습니다. 실망스럽게도 모든 것이 효과가있었습니다. 지금 생각할 수있는 유일한 차이점은 원래 MVC 4를 사용하여 시작한 프로젝트가 MVC 5로 업그레이드되었다는 것입니다.
IIS에서 자세한 오류를 on으로 설정 했습니까? http://blogs.msdn.com/b/rakkimk/archive/2007/05/25/iis7-how-to-enable-the-detailed-error-messages-for-the-website-while-browsed-from- for-the-client-browsers.aspx – Slicksim
@ Slicksim 제 생각에 이것은 web.config에서'httpErrors' 섹션이 구성하는 것과 정확히 일치합니다. – philreed
나는 똑같은 생각을했지만 연습은 다른 것을 보여줍니다. 응답 코드가 오류로 설정되면 IIS 7+는 반환 된 html을 숨기고 자체로 주입합니다. 고정 된로드에서 세부적인 오류를 설정합니다. – Slicksim