【发布时间】:2011-04-10 08:39:13
【问题描述】:
像许多使用 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”)会导致无限循环。
所以这是我的问题:我是否错过了另一种更明显的方法来处理重试循环问题,或者我的方法是一种体面的方法?
【问题讨论】:
标签: asp.net asp.net-mvc-2 http-status-code-404