1

나는 여러 곳WebMatrix WebPages 환경에서 내 사이트가 상태 코드 404의 기본 오류 페이지를 인식하도록 할 수없는 이유는 무엇입니까?

에서 본

[여기] http://www.localwisdom.com/blog/2010/08/how-to-setup-custom-404s-for-iis-and-asp-net-through-web-config/

[여기에 이전 질문에서] How can I make a custom error page in ASP.NET web-pages with WebMatrix?

설정하는 방법 주어진에 대한 사용자 지정 오류 페이지를 강제로 web.config 파일을로 상태 코드 (내가 라고 생각하면은 "500"과 "404"입니다.)

나는 이것을 web.config XML의 <system.web> 요소로 사용하고 있습니다.

<system.web> 
    <compilation debug="true" targetFramework="4.0"><assemblies><add assembly="System.Configuration, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" /></assemblies></compilation> 
    <customErrors mode="On"> 
     <error statusCode="500" redirect="~/Error.cshtml" /> 
     <error statusCode="404" redirect="~/Error404.cshtml" /> 
    </customErrors> 
</system.web> 

상태 코드에 대한 사용자 지정 오류 페이지, "500"보통 서버 쪽 오류에 잘 드실 수 있지만, 어떤 이유에 상관없이 내가 뭘, 내가 정의를 얻을 수가 수 없습니다 예를 들어 깨진 링크가 페이지에서 클릭되면 상태 코드 "404"에 대한 오류 페이지가 표시됩니다. 대신, 그냥 정상적인 "404, 리소스를 찾을 수 없습니다"기본 페이지를 보여줍니다.

<error> 태그의 순서를 변경하려고했는데 (이어야합니다.하지만 알 수 있듯이, 나는 합리적인 방법으로 시도해 보았습니다.).

이 모든 것이 어떻게 작동하는지 오해하고 있습니까? 아니면 단순히 구성/구문을 어떤 식 으로든 잘못 이해하고 있습니다.

-------------------------------- 업데이트 ------------ ----------------------------

정상적인 연결이 끊어지면 내 맞춤 404 페이지가 정상적으로 작동합니다. 그러나, 나는 그것에 .cs 파일을 생성하는 특정 HTML 파일이 있습니다.

하나의 보조 페이지에서

이 그것을 전체 내용의 것 : 데이터베이스에서 온 페이지에 표시하는 것에 대해

@Html.Raw(ContentGenerator.Generate("CityCouncil")) 

값을, 그들은 문자열에 추가로 인코딩하고 있습니다 페이지에 기록됩니다. C# 문자열에 끊어진 링크가 있으면 기본 오류 페이지가 표시되지 않습니다. 이것이 왜 변화를 가져야 하는가? 내 생각 엔 타이밍상의 문제이며, C#이 페이지에 HTML을 쓰게되면 web.config 파일은 더 이상이 링크 나 다른 것에 영향을 미치지 않습니다.

이러한 링크에 대한 기본 오류 페이지를 계속 유지할 수있는 방법이 있습니까?

+0

URL에 확장 기능을 추가하면 error404.cshtml 파일이 제공됩니까? 예 : htp : // locahost : /doesntexist.cshtml –

+0

@MikeBrind 예, 직접 경로를 지정하면 정상적으로 나타납니다. – VoidKing

답변

1

web.config의 customErrors 항목이 system.web 인 URL은 파일 확장명이 설정된 URL에서 작동합니다. 하지만, 당신이 당신의 Web.config에 system.webServer 노드에 항목을 추가하여 IIS를 오버라이드 (override) 할 필요가 확장자없는 URL에 대한 작업이 다 끝나면

<system.webServer> 
    <httpErrors existingResponse="Replace" errorMode="Custom"> 
     <remove statusCode="404" subStatusCode="-1" /> 
     <error statusCode="404" prefixLanguageFilePath="" 
       path="/Error404.cshtml" responseMode="ExecuteURL" /> 
    </httpErrors> 
</system.webServer> 

, 당신은 또한에 처리 다른 사용자 지정 오류를 이동해야 system.webServer 섹션을 열고 customErrors 항목을 system.web 아래에 제거하십시오.

+0

안녕하세요, 마이크. 나를 위해 이것에 대해 밝혀 줘서 고마워. 나는 지금 이것을 시도하고있다. path = "/ Error404.cshtml"'이 있음을 알았습니다.'path = "~/Error404.cshtml"'(물결표에주의하십시오)가되기를 원하지 않습니까? 나는 물결표가 web.config 파일의 다른 URL에 포함되어 있다는 것을 알아 차 렸습니다. 그리고이 파일을 직접 테스트 할 수는 있었지만, 대답을 변경하려는 경우에 알고 싶을 수도 있다고 생각했습니다. 참으로 심지어 관련성이 있음). – VoidKing

+0

좋아, 그래서 이걸 시도해 보니 완전히 효과가 있었다. (고마워, 다시!).하지만 상관 없으면 내 교육을 위해서 몇 가지를 명확히하고 싶었다. 우선, (단지 위의 내 의견에 대해) 말하고 싶습니다. 여기에 포함 된 물음표는 오류가 발생할 경우 유효한 경로를 생성하지 않으므로 제외되어야합니다. 이제, 첫 번째 질문 : "statusCode 500에 대한 오류에서 subStatusCode ="- 1 "을 사용했습니다.이 작업은 가능하지만 subStatusCode가 무엇인지 잘 모르므로 올바른지 확인하려고했습니다." 그리고 두 번째 질문 : ... (계속) – VoidKing

+0

(계속) ... "내 확장 기능이없는 URL을 사용했기 때문에 이것이 모두 필요하다고 말했지만 C# 파일에서 생성 된 URL에는 파일 확장 기능 (예 : /someDir/somePic.jpg). 확장 기능이 없다는 말을 잘못 이해합니까? " – VoidKing