2014-09-15 6 views
2

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 & 얻을 오류입니다 :

    IE
    IE

    크롬 대신
    Chrome

    , 내가 점점되어야하는 것은 원래보기입니다 검증 메시지는 fa 다음 입력 옆에 표시됩니다. ile 검증.

    web.config에서 httpErrors 섹션을 제거하면 문제가 해결되지만 더 이상 사용자 지정 IIS 오류 페이지가 표시되지 않습니다.

    나는 existingResponse 속성의 모든 옵션을 httpErrors에 시도했지만 옵션이 다르면 오류 페이지 또는 ModelState 유효성 검사가 중단됩니다.

    마지막으로 설정을 시도한 Response.TrySkipIisCustomErrors = true; 및이 테스트중인 작업의 문제를 해결하려면 나타납니다.

    그러나이 말은 ModelState을 사용하는 모든 동작에서이 속성을 설정해야한다는 것을 의미하며, 올바르게 작동하지 않습니다.

    내가 뭘 잘못하고 있니?

    업데이트 이 프로젝트가 프로젝트인지 테스트하려면 VS2012에서 새 프로젝트를 만들고 동일한 오류 페이지를 구성했습니다. 실망스럽게도 모든 것이 효과가있었습니다. 지금 생각할 수있는 유일한 차이점은 원래 MVC 4를 사용하여 시작한 프로젝트가 MVC 5로 업그레이드되었다는 것입니다.

  • +0

    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

    +0

    @ Slicksim 제 생각에 이것은 web.config에서'httpErrors' 섹션이 구성하는 것과 정확히 일치합니다. – philreed

    +0

    나는 똑같은 생각을했지만 연습은 다른 것을 보여줍니다. 응답 코드가 오류로 설정되면 IIS 7+는 반환 된 html을 숨기고 자체로 주입합니다. 고정 된로드에서 세부적인 오류를 설정합니다. – Slicksim

    답변

    1

    잘못된 요청과 관련이없는 것으로 보입니다. 대신 메인 양식을 게시 할 때 잘못 호출 된 다른 양식이 페이지에있었습니다.

    관련 문제