2012-02-06 4 views
2

Im은 EPiServer라는 CMS 제품을 사용합니다. .NET의 표준 customErrors를 사용하여 얻을 수없는 404를 표시하는 자체 메서드를 만들어야합니다. 우리는 HttpStatusCode을 확인하기 위해 사용하는 모듈을 작성했습니다. 우리는 EndRequest 메서드에서이 작업을 수행합니다.ASP.NET 404 httpmodule

상태가 404 인 경우 EPiServer에 적절한 404 페이지를 쿼리 한 다음 해당 페이지로 요청을 전송합니다. 그러나이 404을 반환 나던, 그리고 내가 할 경우에도 다음과 같은 올바른 상태 밤은 반환 :

HttpContext.Current.Response.StatusCode = 404; 
HttpContext.Current.Response.StatusDescription = "Page not Found"; 
HttpContext.Current.Server.TransferRequest(newPage); 

을 마찬가지로, 그때 대신 TransferRequest의 Response.Redirect를 할 경우 URL이 있습니다이 아니 적절한 (404) 때문에 다음 변경되었습니다 ...

옳은 방법이 뭐지? 사전에

감사 알

+0

당신이 시도 유무 : http://stackoverflow.com/questions/5966613/process-html-files-with-httpmodule-to-catch-404- 오류 발생시 7 –

답변

0

404 페이지에서 사용중인 템플릿의 코드 숨김에 상태 코드를 설정해야합니다.

이것은 일반 컨텐츠 페이지가 새 템플릿을 만들거나이 null 또는 비어 있지 않은 경우 해당 헤더를 보낼 뒤에 코드에서 페이지와 논리에 대한 상태 코드 속성을 추가하거나, 경우.

0

전송할 페이지의 상태 코드를 오류 페이지 템플릿에서 설정해보십시오. 별도의 모듈을 필요로하는지 확신 할 수 없습니다. 단순히 Global.asax.cs에서 HttpApplication의 Error 이벤트를 처리 할 수 ​​있습니다.

0

답장을 보내 주셔서 감사합니다.

실제로 수행하여이 작업을 얻었다

다음과 같이 대해 EndRequest 이벤트 처리기에서

나는 올바른 EPiServer 페이지로 해제 요청을 전송하고, 호출 즉

app.Context의 쿼리 문자열 PARAM을 포함 .Server.TransferRequest (pageUrl + "& internal = true"); 그것은 내가 올바른 상태를 반환 그래서 404이기 때문에 그것은 단지가 될 수있는 경우 나, 쿼리 문자열 PARAM를 확인하려면 PostRequestHandlerExecute 이벤트 다음

:

HttpContext.Current.Response.StatusCode = 404; HttpContext.Current.Response.StatusDescription = "페이지를 찾을 수 없습니다";

매력처럼 작동합니다.

감사 사용중인 버전을 IIS higgsy

1

? 당신이 뭔가를해야 할 수도 있습니다 IIS7 또는 7.5 :

<httpErrors errorMode="Custom"> 
     <remove statusCode="404" /> 
     <error statusCode="404" path="/somenotfoundpage.aspx" responseMode="ExecuteURL" /> 
     <remove statusCode="500" /> 
     <error statusCode="500" path="/someerrorpage.aspx" responseMode="ExecuteURL" /> 
</httpErrors>