【发布时间】:2010-09-11 15:35:54
【问题描述】:
如何在框架不抛出 Exception 500 错误代码的情况下处理 404 错误?
【问题讨论】:
标签: asp.net-mvc http http-status-code-404
如何在框架不抛出 Exception 500 错误代码的情况下处理 404 错误?
【问题讨论】:
标签: asp.net-mvc http http-status-code-404
http://jason.whitehorn.ws/2008/06/17/Friendly-404-Errors-In-ASPNET-MVC.aspx给出如下解释:
添加通配符路由规则作为最终规则:
routes.MapRoute("Error",
"{*url}",
new { controller = "Error", action = "Http404" });
任何与其他规则不匹配的请求都会被路由到错误控制器的 Http404 操作,您还需要对其进行配置:
public ActionResult Http404(string url) {
Response.StatusCode = 404;
ViewData["url"] = url;
return View();
}
【讨论】:
如果请求与控制器匹配,但与操作不匹配,您也可以在控制器中覆盖 HandleUnknownAction。默认实现确实会引发 404 错误。
【讨论】:
HandleUnknownAction 覆盖的此解决方案:stackoverflow.com/questions/619895/…
throw new HttpException(404, "Resource Not Found");
【讨论】:
使用 MVC 3,您可以返回 HttpNotFound() 以正确返回 404。
像这样:
public ActionResult Download(string fontName)
{
FontCache.InitalizeFonts();
fontName = HttpUtility.UrlDecode(fontName);
var font = FontCache.GetFontByName(fontName);
if (font == null)
return HttpNotFound();
return View(font);
}
【讨论】: