【问题标题】:Not Passing Through Application Error When Controller Doesn't Exist控制器不存在时不通过应用程序错误
【发布时间】:2015-07-14 03:06:05
【问题描述】:

我想在 global.asax 中使用 Application_Error() 来记录网站上的错误 URL 并重定向到自定义错误登录页面。问题是为什么控制器不存在时网站不通过应用程序错误。

我测试了以下 URL 并且所有内容都通过了应用程序错误:

这个没有通过应用程序错误,返回404:

应用程序错误代码:

protected void Application_Error(object sender, EventArgs e)
{
     var requestTime = DateTime.Now;
     Exception ex = Server.GetLastError().GetBaseException();
     //log Request.Url.ToString()
}

RouteConfig.cs 代码:

routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

routes.MapRoute(
    name: "Account",
    url: "Account/{action}/{id}",
    defaults: new { controller = "Account", action = "Index", id = UrlParameter.Optional }
);

routes.MapRoute(
    name: "Home",
    url: "Home/{action}/{test}",
    defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);

routes.MapRoute(
    name: "HomeBlank",
    url: "",
    defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);

【问题讨论】:

  • HandleErrorAttribute 是否注册为全局过滤器?您是否考虑过使用 ELMAH(默认记录所有异常)?
  • 是的,添加了 HandleErrorAttribute。我会检查ELMAH。谢谢。

标签: c# asp.net asp.net-mvc


【解决方案1】:

请将以下内容添加到您的RouteConfig.cs:

routes.MapRoute(
    name: "NotFound",
    url: "{*url}",
    defaults: new { controller = "Error", action = "NotFound", id = UrlParameter.Optional }
);

某些 URL 将无法解析,在上面添加将处理这些情况。在ErrorController 的NotFound 操作中,您可以向用户显示您的自定义错误页面。

public class ErrorController : Controller
{
    public ActionResult NotFound()
    {
        Response.StatusCode = 404;
        return View();
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-04-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-27
    • 2016-10-22
    相关资源
    最近更新 更多