4

在 ASP.NET MVC 4 应用程序中,我们设置了一个包罗万象的路由,如下所示:

routes.MapRoute( 
     name: "UnKnown",  
     url: "{*url}",  
     defaults: new { controller = "CatchAll", action = "UnknownUrl" });

CatchAllController 中的 UnknownUrl 方法在我们的开发环境中正确加载了它的视图。

但是,如果不存在的远程请求到达,生产 IIS 7.5 会显示其标准 404 页面。在服务器本身上使用 RDP 发送的本地请求工作正常

web.config 设置为 tp

<customErrors mode="Off"/>

本地呼叫和远程呼叫之间还有什么区别?我们如何让 MVC HttpHandler 捕获这些请求?

提示可能是我们也无法使 IIS 在远程调用时显示任何详细的状态 500 错误消息。

4

2 回答 2

3

我遇到了 IIS 显示默认错误而不是 .NET 错误的问题,我已system.webServer在 web.config 中使用以下内容进行了修复:

<httpErrors existingResponse="PassThrough"/>

我认为如果在你的UnknownUrl行动中你正在设置这会发生Response.StatusCode = 404;。默认情况下,IIS 会看到您正在返回错误代码,因此会显示默认错误消息,您可以使用该配置设置覆盖该消息。

我不确定这在本地 v 远程上会有所不同,但值得一试。

于 2013-04-24T10:37:17.200 回答
1

您可以尝试设置主机标头 - 我相信这是导致本地和生产之间差异的原因:

new { controller = "CatchAll", action = "UnknownUrl", host = HttpContext.Current.Request.Url.Host}

从 Application_BeginRequest 注册此路由Global.asax。此外,请确保仅执行一次 - 可能通过类似于以下内容的检查:

if (routes["UnKnown"] == null)
        {
            routes.MapRoute( 
                name: "UnKnown",  
                url: "{*url}",
                defaults: new { controller = "CatchAll", action = "UnknownUrl", host = HttpContext.Current.Request.Url.Host}
            );
        }
于 2013-04-24T08:07:46.927 回答