ASP.NET MVC3:在localhost和服务器上忽略Web.Config中的customErrors,自定义错误页面仅显示在localhost上

时间:2011-11-04 15:04:15

标签: c# asp.net-mvc-3 web-config http-status-code-404 custom-errors

我正在尝试获取我们构建的自定义404页面,而不是服务器创建的默认404页面。它在本地调试应用程序时按预期工作,但在服务器上运行应用程序时则无法工作。他们的web.config文件看起来完全一样。

    <customErrors mode="On" defaultRedirect="~/Error/Index">
        <error statusCode="404" redirect="~/Error/NotFound" />
    </customErrors>

奇怪的是,当修改任何内容时 - 将设置模式设置为“关闭”或“RemoteOnly”,将“〜/ Error”更改为“Error”,或者完全删除该部分 - 结果始终相同:我在本地获得了漂亮的404页面,但没有在服务器上。

在本地调试时,此方法按预期执行:

    public class ErrorController : BaseController
    {
        [AcceptVerbs(HttpVerbs.Get)]
        public ActionResult NotFound()
        {
            Response.StatusCode = (int)HttpStatusCode.NotFound;
            ErrorSignal.FromCurrentContext().Raise(new HttpException(404, Request.Url.PathAndQuery + " was not found"));
            return View();
        }
    }

因为它在Global.asax中找到了这条路线:

routes.MapRoute(
"NotFound",
"{*path}",
    new { controller = "Error", action = "NotFound" });

赞赏任何建议。

3 个答案:

答案 0 :(得分:3)

问题解决了 - 我找到了管理我们IIS设置的人,并让他将404s的错误页面路径更改为重定向到URL,该URL为“/Error/NotFound/Index.aspx”。但显然,这只相当于将其添加到system.webServer部分:

<httpErrors>
    <remove statusCode="404" subStatusCode="-1" />
    <error statusCode="404" prefixLanguageFilePath="" path="/Error/NotFound" responseMode="ExecuteURL" />
</httpErrors>

答案 1 :(得分:1)

听起来像你在服务器上获得的404是因为无法找到自定义404。您是否可以浏览自定义404?

答案 2 :(得分:0)

服务器上的iis是否未在集成模式下运行?如果是这样404s永远不会打到asp.net 什么版本的iis?确保它不是经典模式。