当 url 包含 4 个或更多路径段时,MVC 3 中的 404 不会触发 Application_Error
我正在尝试为 404 错误创建自定义错误页面。我已经在 Global.asax.cs 中实现了 Application_Error 方法。在大多数情况下,这非常有效,但对于具有 4 个或更多路径段的 URL,不会调用该方法。
我遇到问题的具体 URL 是:
http://localhost/Area/Controller/Action/ID
如果我删除 ID,我的自定义 404 年龄加载正常。问题似乎是我的路径中有 4 个级别 (/Area/Controller/Action/ID)。有什么想法吗?
I am trying to create a custom error page for 404 errors. I have implemented the Application_Error method in Global.asax.cs. For the most part this works great, but the method isn't getting called for URLs with 4 or more path segments.
The specific URL that I'm having trouble with is:
http://localhost/Area/Controller/Action/ID
If I remove the ID, my custom 404 age loads fine. The problem seems to be having 4 levels in my path (/Area/Controller/Action/ID). Any ideas?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
我怀疑你的路由没有考虑到由 4 部分组成的 URL。尝试添加一条捕获所有路由作为最后一条路由来测试这一点:
在 RouteConfig.cs 问题中包含(部分)路由也可能有所帮助。
I suspect your routes don't account for a URL with 4 parts. Try adding a catch all route as your last route to test this:
Including (some of) your routes in your RouteConfig.cs question might also help.
设置 IIS 的自定义错误页面:在 IIS 中右键单击您的网站/虚拟目录 -->属性-->自定义错误选项卡 -->将 404 错误设置为您的错误页面。
您的自定义错误只会在符合您的路由规则的情况下触发。一旦所有路由规则失败并且在该路径上找不到页面,它就会将错误传递给 IIS。然后,IIS 使用其 404 规则来处理未找到的对象,因此您必须覆盖该规则并将其指向您的项目中的自定义 404。
Set the custom error page for IIS: In IIS rightclick your website/virtual directory --> properties --> custom errors tab --> set the 404 error to your error page.
Your custom errors will only fire for things that fit your route rules. Once all of your route rules fail and it does not find a page at that path it passes the error up to IIS. IIS then uses its 404 rule for object not found so you have to override that and point it back into your project to your custom 404.
您是否收到 IIS 错误页面?试试这个。
Are you getting your IIS error page instead? Try this.