【问题标题】:Custom Error Page is not working on live server自定义错误页面在实时服务器上不起作用
【发布时间】:2013-01-24 05:32:11
【问题描述】:

我已经在我的项目中实现了自定义错误功能,它可以在本地 IIS 上运行,但不能在实时服务器上运行。我已经使用 Global.asax 文件实现了这个功能,并且我在 MVC 的自定义错误控制器中调用了我的自定义错误操作方法。我已经在本地 IIS 上发布并运行,它运行良好,但在实时服务器上。

我的 Global.asax.cs 文件

public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
    //do not register HandleErrorAttribute. use classic error handling mode
    filters.Add(new HandleErrorAttribute());
}

protected void Application_Error(Object sender, EventArgs e)
{
    LogException(Server.GetLastError());

    CustomErrorsSection customErrorsSection = (CustomErrorsSection)ConfigurationManager.GetSection("system.web/customErrors");
    string defaultRedirect = customErrorsSection.DefaultRedirect;
    if (customErrorsSection.Mod e== CustomErrorsMode.On)
    {
        var ex = Server.GetLastError().GetBaseException();

        Server.ClearError();
        var routeData = new RouteData();
        routeData.Values.Add("controller", "Common");
        routeData.Values.Add("action", "CustomError");

        if (ex is HttpException)
        {
            var httpException = (HttpException)ex;
            var code = httpException.GetHttpCode();
            routeData.Values.Add("status", code);
        }
        else
        {
            routeData.Values.Add("status", 500);
        }

        routeData.Values.Add("error", ex);

        IController errorController = new Test.Controllers.CommonController();
        errorController.Execute(new RequestContext(new HttpContextWrapper(Context), routeData));
    }
}

我的自定义错误控制器及其操作方法

public ActionResult CustomError(int status, Exception error)
{
    var model = new CustomErrorModel();
    model.Code = status;
    model.Description = Convert.ToString(error);
    Response.StatusCode = status;
    return View(model);
}

那我该怎么办?

【问题讨论】:

  • 我建议你提供一些代码给我们看看..
  • 我们能看到一些代码吗?您的 web.config 设置是否正确?你没有给我们太多信息。
  • 本地 IIS 和实时 IIS 是什么意思?我认为您需要检查 IIS 配置。
  • 你解决了吗?实际上我遇到了这个问题,当 Casini 在没有匹配路由时调用 Application_Error ,但 IIS Express 没有(它显示其标准 404 错误报告)。有没有办法在 IIS Express 中同时获取 HTTP ERROR 404 状态和自定义错误页面,我想知道(我还没有在 IIS 上检查所有这些)?

标签: c# .net asp.net-mvc global-asax custom-errors


【解决方案1】:

我遇到了这个问题,实时 IIS 服务器上的错误没有显示自定义错误页面(返回正确的 HttpStatusCodes),但它在本地 IIS 上工作(使用默认网站的本地主机地址 - 不是 Cassini) .它们的工作方式应该与我想象的完全一样 - 无论如何,这个 web.config 设置修复了它。

<configuration>
    <system.webServer>
        <httpErrors existingResponse="PassThrough"></httpErrors>
    </system.webServer>
</configuration>

请注意,我的设置使用 global.asax 中的 Application_Error 和其他 web.config 设置:

<customErrors mode="On">
    <!-- There is custom handling of errors in Global.asax -->
</customErrors>

【讨论】:

    【解决方案2】:

    2 种方法

    路由方法

    // We couldn't find a route to handle the request. Show the 404 page. 
    routes.MapRoute("Error", "{*url}", new { controller = "Error", action = "CustomError" } );
    

    Web.config 中的自定义错误处理程序

    <customErrors mode="On" >
        <error statusCode="404" redirect="~/CatchallController/CustomError" />
    </customErrors>   
    

    没有路由匹配引发的条件是 404。这样你就可以将所有不匹配的东西都指向你的~/CatchallController/CustomError

    【讨论】:

    • 但这两种方法都会导致浏览器中的200 OK 状态,而期望的行为是获得404。实际上我遇到了这个问题,当 Casini 确实在没有匹配路由时调用Application_Error,但 IIS Express 没有(它显示其标准的 404 错误报告)。有没有办法在 IIS Express 中同时获取 HTTP ERROR 404 状态和自定义错误页面(我还没有在 IIS 上检查所有这些)?
    • @KonstantinVasilcov,我看到这个 OP 已经一个月了。仍然让我的思绪再次围绕它。从现在来看,我认为目标是优雅地捕捉 404...
    猜你喜欢
    • 1970-01-01
    • 2019-08-17
    • 2013-03-06
    • 2012-07-24
    • 2014-03-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多