Sco*_*ttE 7 c# asp.net sharepoint httpmodule
我必须实现一个自定义的HttpModule来处理Sharepoint中的404错误.
它侦听PreSendRequestContent事件,并查找404状态代码.如果找到一个,它会执行TransferRequest.
void App_PreSendRequestContent(object sender, EventArgs e)
{
HttpResponse res = App.Response;
HttpRequest req = App.Request;
if (res.StatusCode == 404 && !req.Url.AbsolutePath.Equals(PageNotFoundUrl, StringComparison.InvariantCultureIgnoreCase))
{
App.Server.TransferRequest(PageNotFoundUrl);
}
}
Run Code Online (Sandbox Code Playgroud)
这工作得很好,但我注意到在Fiddler中该页面显示了200状态代码,即使原始请求是404.这对搜索引擎也不好.
这是TransferRequest的预期行为吗?我可以以某种方式维护404状态代码吗?或者,我是否会更好地使用旧的老式Server.Transfer?
更新
我在sharepoint环境之外尝试了这个,并且Server.TransferRequest请求确实提供了200状态代码,删除了404.Server.Transfer不起作用,因为我不认为它可以给出管道.
更新2
感谢下面的答案,我添加了以下内容:
void App_PostRequestHandlerExecute(object sender, EventArgs e)
{
HttpResponse res = App.Response;
HttpRequest req = App.Request;
if (req.Url.AbsolutePath.Equals(PageNotFoundUrl, StringComparison.InvariantCultureIgnoreCase))
{
res.StatusCode = 404;
}
}
Run Code Online (Sandbox Code Playgroud)
嗯,TransferRequest()触发了一个新的请求,这意味着一个新的响应。PageNotFoundUrl由于指向的资源确实存在,因此客户端会收到合法的200 OK状态标头。
您可能需要编写一个 HTTP 处理程序(或处理Global.asax中的事件),以便404 Not Found在提供服务时强制使用状态标头PageNotFoundUrl。
| 归档时间: |
|
| 查看次数: |
3867 次 |
| 最近记录: |