首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MVC忽略CustomErrors并重定向404错误

MVC忽略CustomErrors并重定向404错误
EN

Stack Overflow用户
提问于 2012-03-13 22:37:09
回答 2查看 1.3K关注 0票数 1

我有两个网站,AB,它们的配置非常相似,都运行在ASP.NET MVC 3上。它们都有一个ErrorController和下面的CustomErrors web.config设置:

代码语言:javascript
复制
<customErrors mode="On" defaultRedirect="Error" />

对于这两个网站,所有服务器异常都会如期而至地重定向到ErrorController.Index()。对于网站A404错误的行为与任何其他服务器异常一样,并被重定向到ErrorController.Index()。对于网站B404错误从未击中ErrorController,网站在从Application_Error返回时立即将StatusCode 404返回给浏览器。

为了缩小问题的原因,我从<customErrors />设置切换到这个实现:

How to implement proper HTTP error handling in .NET MVC 2?

该解决方案在网站A上运行得很好,但仍然在网站B上返回StatusCode 404,即使使用该解决方案确实成功地命中了BErrorController.Index()并成功返回(然后立即返回404代码)。

是否有人知道我可能遗漏了一些设置,它与其他异常不同地处理404错误?似乎在返回Application_Error和发送给浏览器的响应之间,MVC再次用404代码覆盖响应。

以下是我在Step-Into的结束大括号上点击Application_Error时的调试输出,响应包含自定义错误回复。由于这些都是.NET代码,我倾向于认为问题在于配置.

代码语言:javascript
复制
Step into: Stepping over non-user code 'System.Web.HttpApplication.ApplicationStepManager.ResumeSteps'
Step into: Stepping over non-user code 'System.Web.HttpApplication.System.Web.IHttpAsyncHandler.BeginProcessRequest'
Step into: Stepping over non-user code 'System.Web.HttpRuntime.ProcessRequestInternal'
Step into: Stepping over non-user code 'Microsoft.VisualStudio.WebHost.Request.Process'
Step into: Stepping over non-user code 'Microsoft.VisualStudio.WebHost.Host.ProcessRequest'
Step into: Stepping over non-user code 'System.Runtime.Serialization.ObjectCloneHelper.GetObjectData'
Step into: Stepping over non-user code 'System.Runtime.Serialization.ObjectCloneHelper.GetObjectData'
Step into: Stepping over non-user code 'System.Runtime.Serialization.ObjectCloneHelper.PrepareConstructorArgs'
Step into: Stepping over non-user code 'System.Runtime.Remoting.Messaging.LogicalCallContext.LogicalCallContext'
Step into: Stepping over non-user code 'System.Runtime.Serialization.ObjectCloneHelper.PrepareConstructorArgs'
Step into: Stepping over non-user code 'System.Threading.ExecutionContext.ExecutionContext'
Step into: Stepping over non-user code 'System.Threading.ThreadPoolWorkQueue.Dispatch'

这是为http://localhost/asdf引发的异常

代码语言:javascript
复制
System.InvalidOperationException: The IControllerFactory did not return a controller for the name 'asdf'.

编辑: Fiddler日志(根据请求)

代码语言:javascript
复制
GET /asdf HTTP/1.1
Host: localhost:60000
Connection: keep-alive
Cache-Control: max-age=0
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.54 Safari/535.19
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Encoding: gzip,deflate,sdch
Accept-Language: en-US,en;q=0.8
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3
Cookie: ASP.NET_SessionId=eedy1t51bn1ezpqpcyu50gyk; __RequestVerificationToken_Lw__=eaKTV3bjxX1o2WirmR5C3bBEZcRvzLoXu/+Q4IjC7CJ93cth4Wh7hKP3Uj9/l54hWL8P2MIf1THR+sg0ZEQzOPK3uH99MdyVk+l9/aMBcleP/J8ZZOVAJqKX6TyCUt/jaCUVCexhzq0hbIcTE2Kj23ReINU=; .ASPXAUTH=0F432A1EA5723F00959C20465475F680E3E623729BB205533F91C83E9A23E96F845CDE8FEDCE9C35F87024FE299B473601D05ACAFBB4F69B31566FD538FC0CCC54E6A824A1B0DD99AAB3292D5077A8D1830DE6992C6AF2E62ED382CE9448AE0D5A25FEEB50BB95D026767B53C72DA879CF77503F22DC8EE1A7B4EAE774E052EBF005F006; AccountID=1

HTTP/1.1 404 Not Found
Server: ASP.NET Development Server/10.0.0.0
Date: Tue, 13 Mar 2012 23:08:08 GMT
X-AspNet-Version: 4.0.30319
X-AspNetMvc-Version: 3.0
Cache-Control: private
Content-Type: text/html
Connection: Close

编辑:--在调用Application_Error时,响应头看起来已经发送了,所以不管在该方法或web.config中发生了什么,浏览器只会显示404。对于什么会触发站点B而不是A提前发送标头的任何建议

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-03-14 16:39:55

解决了:--响应头是用代码404设置的,然后关闭。我修改了控制器工厂,使其不调用.End(),现在一切都如预期的那样。

票数 0
EN

Stack Overflow用户

发布于 2012-03-13 22:42:34

尝试添加一个正斜杠。否则,它可能会试图导航到http://localhost/asdf/Error

代码语言:javascript
复制
<customErrors mode="On" defaultRedirect="/Error" />

其他提示,请查看IIS日志。

使用小提琴看什么是被要求。

我在我的WebConfig中使用以下内容。

代码语言:javascript
复制
    <customErrors mode="RemoteOnly">
        <error statusCode="404" redirect="/Error/Error404" />
        <error statusCode="500" redirect="/Error/Error500" />
    </customErrors>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9693271

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档