正常工作,我有我的Global.asax底部以下路线:MVC:404路线不是在生产中
//404 ERRORS:
routes.MapRoute(
"404-PageNotFound",
"{*url}",
new { controller = "Error", action = "PageNotFound" }
);
其中一期工程在Visual Studio罚款,但在生产中我得到了IIS错误页。
不应该这条路线赶上任何 URL没有被别人抓住,因此从IIS的角度来看没有404s?还有什么我需要做的web.config?
注意:我做不是想要重定向到404特定的URL;而是我在请求的URL上提供了404错误页面(我相信这是从可用性角度来看的正确方法)。
UPDATE
在我的差错控制,我设置Response.StatusCode = 404;
,这似乎是这个问题。当我删除这个并再次部署到生产环境时,我又收到了友好的错误页面。不过,我相信我做需要在HTTP头中的404个状态 - 搜索引擎优化的目的 - 所以我现在的问题就变成了:
经修订的课题
如何/为什么IIS拦截响应并发送其开箱即用的404错误,以及如何防止这种情况?
** SOLUTION * *
Dommer得到奖建议Response.TrySkipIisCustomErrors=true;
这(我认为)是必要的。但也有2个其他关键细节:
- 自定义错误必须在在web.config中(废话!),并
- 404行动必须有[HandleErrors]属性。
使其成为无处不在的工作
由于某些URL可能会映射到除了“404-PageNotFound”等,但包含无效参数的路线,因为我不想重定向到 404页,我在基地控制器创造了这个动作:
[HandleError]
public ActionResult NotFound()
{
Response.StatusCode = 404;
Response.TrySkipIisCustomErrors = true;
return View("PageNotFound", SearchUtilities.GetPageNotFoundModel(HttpContext.Request.RawUrl));
}
和任何控制器的行动,在继承的基础上,我只需要调用这个每当我赶上了无效的路径参数:
return NotFound();
注:不 RedirectToAction()在蛋糕上
结冰:
我已经生成并传递到视图的模型是对URL的罗嗦位送入我们的搜索引擎,并在友好的404页面上显示前3名的结果作为建议。
你得到了这个工作很高兴。它看起来不错! –