与许多使用ASP.NET MVC的人一样,我使用类似于此处描述的方法实现了我自己的自定义404错误处理方案:How can I properly handle 404 in ASP.NET MVC?
(我实际上在实施自己的解决方案之后发现了这个帖子,但我想出来的几乎完全相同。)
然而,我遇到了一个问题,我不知道如何妥善处理。这是我的ErrorController类中的404动作:
public ActionResult NotFound(string url)
{
url = (url ?? "");
if (Request.Url.OriginalString.Contains(url) &&
Request.Url.OriginalString != url)
{
url = Request.Url.OriginalString;
}
url = new Uri(url).AbsolutePath;
// Check URL to prevent 'retry loop'
if (url != "/Error/NotFound")
{
Response.StatusCode = (int)HttpStatusCode.NotFound;
// Log 404 error just in case something important really is
// missing from the web site...
Elmah.ErrorSignal.FromCurrentContext().Raise(
new HttpException(Response.StatusCode,
String.Format("Resource not found: {0}", url)));
}
return View();
}
与上面引用的其他StackOverflow问题中的答案不同的部分是如何阻止'重试循环'。在另一个答案中,阻止重试循环的代码只是在ViewModel上设置属性,这似乎并没有真正阻止循环。由于操作发回的响应代码为404,因此直接访问操作(通过在浏览器中键入“/ Error / NotFound”)会导致无限循环。
所以这是我的问题:我是否错过了处理重试循环问题的另一种更明显的方法,或者我的方法是否适合这样做?