我有以下代码检查异常,如果它是404异常,它将检查网址列表以查看页面是否已被移动,如果匹配,将发出永久重定向到新页面:
protected void Application_Error(object sender, EventArgs e)
{
var exception = Server.GetLastError();
if (exception != null)
{
if (exception is HttpException)
{
TryRedirect((HttpException)exception);
}
LogError(exception);
}
}
private void TryRedirect(HttpException httpException)
{
if (httpException.GetHttpCode() == 404)
{
WebsiteRedirect redirect = SiteCache.Redirects.FirstOrDefault(x => string.Compare(x.LegacyURL, HttpContext.Current.Request.RawUrl, true) == 0);
if (redirect != null)
{
// 301 it to the new url
Response.RedirectPermanent(redirect.NewURL);
}
}
}
现在我希望在重定向发生之后,不执行它之后的代码,即不会调用LogError
函数。但似乎是因为我收到了未找到页面的错误消息。
这是MVC Response.RedirectPermanent
的标准行为吗?
答案 0 :(得分:3)
好的,因为事实证明这是标准行为,因为RedirectPermanent
有2次重载(我从未看到第二次重载,因为我的VS正在播放):
Response.RedirectPermanent(string url);
Response.RedirectPermanent(string url, bool endResponse);
endResponse
选项表示永久重定向将继续完成响应或在重定向后立即结束进程。
默认设置为false意味着第一次重载(我使用过的)将完成响应,这就是它调用LogError
函数的原因
答案 1 :(得分:-1)
当您使用response.RedirectPermanent()
时,它将完全委托请求。它不会在Response.RedirectPermanent(redirect.NewURL)
语句后执行或处理任何语句。
如果你使用Response.RedirectPermanent(string,boolean)方法然后将boolean值赋给true然后它将执行你的logerror(异常)
我要求您浏览此链接http://www.stepforth.com/blog/2008/redirects-permanent-301-vs-temporary-302/#.U7pxUfmSx-M
答案 2 :(得分:-1)
Response.RedirectPermanent(string url, bool endResponse);
return null;