几种方法:
在您的 web.config 中 customErrors 模式设置redirectMode
为ResponseRewrite
- 这将删除从服务器到错误页面的 302 重定向 - 这也有一个令人高兴的巧合,使用可以轻松查看他们请求的原始页面是什么,并且可以重试F5 如果这可能会解决问题。
如果您要挂钩 ApplicationError 事件,请确保不要重定向到您使用的错误页面Server.Transfer
。
我的 web.config 之一中有以下内容:
<customErrors mode="On"
defaultRedirect="ErrorHandler.aspx"
redirectMode="ResponseRewrite">
然后在我的 ErrorHandler 页面中,我检查来自服务器的最后一个错误,并配置这些:
var serverError = Server.GetLastError();
var error = serverError as HttpException;
int errorCode;
string errorMessage;
if (null != error)
{
errorCode = error.GetHttpCode();
errorMessage = error.GetHtmlErrorMessage();
}
else
{
errorCode = 404;
errorMessage = "Page not found";
}
Response.StatusCode = errorCode;
Response.StatusDescription = errorMessage;
显然你可能想要做额外的处理——例如,在我做这一切之前,我将原始请求与我的重定向数据库进行比较,以检查移动的内容/虚名 url,只有在我找不到合适的时候才回退到这个重定向。