2012-02-06 45 views
2

Im使用名为EPiServer的CMS产品。我们需要创建我们自己的显示404的方法,这是使用.NET的标准customErrors无法实现的。我们已经撰写了一个模块,我们用它来检查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); 

同样,如果我做的Response.Redirect,而不是TransferRequest那么它不是一个正确的404,因为URL有再改......

请告诉我这样做的正确方法吗?

在此先感谢 铝

+0

你有没有尝试过这样的:http://stackoverflow.com/questions/5966613/process-html-files-with-httpmodule-to-catch-404-错误 - 上IIS7 – 2012-02-06 10:55:06

回答

0

您应该在您用于404页面的模板的代码隐藏中设置状态代码。

如果这是一个普通的内容页面,创建一个新的模板或代码添加一个状态代码属性页面,背后的逻辑发送适当的头,如果这不是空。

0

尝试设置你传送到页面上的状态代码 - 在您的错误页面模板。我不确定是否需要单独的模块 - 您可以简单地处理Global.asax.cs中的HttpApplication的错误事件。

0

感谢您的回复。

其实我做了这个工作如下:

在EndRequest事件处理程序,我把该请求关闭到正确的EPiServer页,并包括在呼叫即

app.Context查询字符串PARAM .Server.TransferRequest(pageUrl +“& internal = true”);

然后在PostRequestHandlerExecute事件中,我检查查询字符串PARAM,如果存在的话那只能是因为它是一个404,所以我返回正确的状态:

HttpContext.Current.Response.StatusCode = 404; HttpContext.Current.Response.StatusDescription =“找不到页面”;

工程就像一个魅力。

感谢 higgsy

1

您正在使用哪个IIS版本?对于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>