2011-08-25 2 views
12

여기에 게시 된 다른 질문은 첫 번째 질문에 대한 해결책을 제공합니다. 즉, ASP.NET MVC에서 404 페이지를 생성하는 방법입니다. WITH redirecting (즉, 원래 요청한 URL은 주소 표시 줄에 남아 있습니다).IOCControllerFactory를 사용할 때 리디렉션없이 StackOverflow와 같은 404를 던지십시오.

ASP.NET MVC - How to throw a 404 page similar to that on StackOverflow

protected void Application_Error(object sender, EventArgs e) 
    { 
     var exception = Server.GetLastError(); 

     Response.Clear(); 
     var httpException = exception as HttpException; 
     var routeData = new RouteData(); 
     routeData.Values.Add("controller", "Error"); 

     if (httpException != null) 
     { 
      routeData.Values.Add("action", httpException.GetHttpCode() == 404 ? "NotFound" : "Unknown"); 

      // clear the error, otherwise, we will always get the default error page. 
      Server.ClearError(); 

      // call the controller with the route 
      IController errorController = new ErrorController(); 
      errorController.Execute(new RequestContext(new HttpContextWrapper(Context), routeData)); 

     } 
    } 

내가을 나는이 공장을 사용하는 즉시 IOCControllerFactory 사용하지만,하지 않을 경우 것들의 (404)면이 나를 위해 잘 작동 global.asax의 오류 코드가 아닙니다 사용 대신 내가받을 다음과 같은 오류 :

The IControllerFactory 'MyNamespace.IOCControllerFactory' did not return a controller for the name 'blah'.

어떻게 제어 방식의 각각에 대해 매개 변수가없는 생성자를 내 controllerfactory 치우는에 의존하고 생성하지 않고,이 문제를 해결받을 수 있나요 창녀?

+0

보기 [포스트 (http://stackoverflow.com/questions/619895/how-can-i-properly-handle-404-in-asp-net-mvc/7967759#7967759), 이는 ASP.Net MVC 필터 속성을 사용하는 사용자 정의 404 오류 페이지 솔루션의 예입니다. 이 솔루션은 또한 브라우저에 대한 302/200 메시지를 피합니다. 브라우저는 404 응답을받습니다. –

답변

12

ASP.NET can do이 OOTB (3.5에서 시작). <CustomErrors> 요소에 추가 : redirectMode=ResponseRewrite

업데이트

내가 잘못된 코드를 기록했다. 이것을 처리하는 것은 IIS 7입니다.

<system.webServer> 
    <httpErrors errorMode="Custom" existingResponse="Replace"> 
     <remove statusCode="404" /> 
     <error statusCode="404" path="/home/notfound" responseMode="ExecuteURL" /> 
    </httpErrors> 
<system.webServer> 
+0

불행히도, 웹 양식 만이 MVC에서 작동하지 않습니다. 나는 이것에 대한 또 다른 기사를 발견했지만 MVC에 대한 기쁨을 시도하지 않았다. ( – marcusstarnes

+0

내가 게시 한 코드는 내 자신의 ASP.NET MVC 프로젝트 중 하나였습니다. 제대로 작동합니다. IIS 7을 사용하여 테스트되었습니다. 어떤 웹 서버에서 테스트 했습니까? ? 내가 비주얼 스튜디오의 dev에 내장 된 작동하지 않을거야. 섬기는 사람. –

+0

나는 위와 같이 업데이트 된 코드를 시도했지만 (불행하게도 system.web 섹션에 추가로 customerrors 섹션이 있거나없는 경우), 성공하지 못했습니다. 내 사용자 정의 오류 페이지 대신 오류가 발생하면 실제로 403을 금합니다. system.web 섹션에 추가 customerrors 섹션을 추가했을 때 403에도 불구하고 SSL (?!)을 언급했지만 IIS7 구성을 확인한 결과이 웹 응용 프로그램에 SSL이 설정되어 있지 않습니다. 혼란스러워! – marcusstarnes

관련 문제