gpt4 book ai didi

asp.net-mvc - MVC : 404 route not working properly in production

转载 作者:行者123 更新时间:2023-12-02 05:21:49 31 4
gpt4 key购买 nike

我的 global.asax 底部有以下路线:

//404 ERRORS:
routes.MapRoute(
"404-PageNotFound",
"{*url}",
new { controller = "Error", action = "PageNotFound" }
);

这在 Visual Studio 中运行良好,但在生产中我收到 IIS 错误页面。

此路由不应该捕获其他路由未捕获的任何 URL,因此从 IIS 的角度来看不会出现 404 错误吗?我还需要在 web.config 中做任何其他事情吗?

注意:我不想想要重定向到 404 特定的 URL;相反,我在请求的 URL 处提供 404 错误页面(我相信从可用性的角度来看这是正确的方法)。

更新
在我的错误 Controller 中,我设置了 Response.StatusCode = 404; ,这似乎是问题所在。当我删除它并再次部署到生产环境时,我再次收到友好的错误页面。但是,我相信我确实需要 HTTP header 中的 404 状态(出于 SEO 目的),所以我的问题现在变成:

修改后的问题
IIS 如何/为何拦截响应并发送开箱即用的 404 错误,以及如何防止这种情况发生?

**解决方案**
Dommer 因建议 Response.TrySkipIisCustomErrors=true; 而获奖,我认为这是必要的。但还有其他两个关键细节:

  • 自定义错误需要在 web.config 中开启(废话!),并且
  • 404 操作必须具有 [HandleErrors] 属性。

让它在任何地方都有效
由于某些 URL 可能会映射到“404-PageNotFound”以外的路由,但包含无效参数,并且由于我不想重定向到 404 页面,因此我在基本 Controller 中创建了此操作:

[HandleError]
public ActionResult NotFound()
{
Response.StatusCode = 404;
Response.TrySkipIisCustomErrors = true;
return View("PageNotFound", SearchUtilities.GetPageNotFoundModel(HttpContext.Request.RawUrl));
}

并且在继承基础的任何 Controller 操作中,每当我捕获无效的路由参数时,我只需要调用它:

return NotFound();

注意:不是RedirectToAction()

锦上添花:
我生成并传递到 View 中的模型是将 URL 的冗长部分输入到我们的搜索引擎中,并在友好的 404 页面上显示前 3 个结果作为建议。

最佳答案

问题是您的请求与您之前的路由之一匹配,然后失败。一个可能的解决方案是尝试限制其他路线,如下所示:

// This will match too many things, so let's constrain it to those we know are valid
routes.MapRoute(
"Default",
"{controller}/{action}/{id}",
new { controller = "Home", action = "Index", id = UrlParameter.Optional },
new { controller = "Home|OtherController|AnotherController|..." } // regular expression matching all valid controllers
);

//404 ERRORS:
routes.MapRoute(
"404-PageNotFound",
"{*url}",
new { controller = "Error", action = "PageNotFound" }
);

如果您想要更全面的答案,请查看以下内容:How can I properly handle 404 in ASP.NET MVC?

编辑:

要消除自定义 IIS 错误,请尝试将错误 Controller 更改为如下所示:

Response.StatusCode = 404;
Response.TrySkipIisCustomErrors=true; // add this line

MSDN 文档:http://msdn.microsoft.com/en-us/library/system.web.httpresponse.tryskipiiscustomerrors.aspx

关于asp.net-mvc - MVC : 404 route not working properly in production,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7804465/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com