ASP.NET MVC自定义错误处理Application_Error Global.asax?

阿里里克

我有一些基本代码来确定我的MVC应用程序中的错误。目前在我的项目,我有一个名为控制器Error与操作方法HTTPError404()HTTPError500()General()它们都接受一个字符串参数error使用或修改下面的代码。将数据传递到错误控制器进行处理的最佳/正确方法是什么?我想有一个尽可能强大的解决方案。

protected void Application_Error(object sender, EventArgs e)
{
    Exception exception = Server.GetLastError();
    Response.Clear();

    HttpException httpException = exception as HttpException;
    if (httpException != null)
    {
        RouteData routeData = new RouteData();
        routeData.Values.Add("controller", "Error");
        switch (httpException.GetHttpCode())
        {
            case 404:
                // page not found
                routeData.Values.Add("action", "HttpError404");
                break;
            case 500:
                // server error
                routeData.Values.Add("action", "HttpError500");
                break;
            default:
                routeData.Values.Add("action", "General");
                break;
        }
        routeData.Values.Add("error", exception);
        // clear error on server
        Server.ClearError();

        // at this point how to properly pass route data to error controller?
    }
}
安德烈卡鲁奇

无需为此创建新路由,您只需重定向到控制器/操作并通过querystring传递信息即可。例如:

protected void Application_Error(object sender, EventArgs e) {
  Exception exception = Server.GetLastError();
  Response.Clear();

  HttpException httpException = exception as HttpException;

  if (httpException != null) {
    string action;

    switch (httpException.GetHttpCode()) {
      case 404:
        // page not found
        action = "HttpError404";
        break;
      case 500:
        // server error
        action = "HttpError500";
        break;
      default:
        action = "General";
        break;
      }

      // clear error on server
      Server.ClearError();

      Response.Redirect(String.Format("~/Error/{0}/?message={1}", action, exception.Message));
    }

然后,您的控制器将收到您想要的任何东西:

// GET: /Error/HttpError404
public ActionResult HttpError404(string message) {
   return View("SomeView", message);
}

您的方法需要权衡取舍。在这种错误处理中循环时要非常小心。另一件事是,由于要通过asp.net管道来处理404,因此将为所有这些匹配创建会话对象。对于频繁使用的系统,这可能是一个问题(性能)。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用Global.asax asp.net的自定义错误

来自分类Dev

在ASP.NET MVC 4中的Global.asax中获取服务器

来自分类Dev

在ASP.NET MVC应用程序中的Global.asax级别配置最新版本的AutoMapper

来自分类Dev

如何将global.asax文件添加到ASP.NET MVC4项目?

来自分类Dev

ASP.NET会话状态无法在Web.config和Global.asax中使用

来自分类Dev

我的Asp.Net空Web应用程序项目上缺少Global.asax文件

来自分类Dev

ASP.Net-Global.asax的存在会阻止并行请求执行?

来自分类Dev

如何使用global.asax停止应用程序asp.net

来自分类Dev

ASP.NET Global.asax-捆绑中的IE条件样式表

来自分类Dev

如何使用global.asax停止应用程序asp.net

来自分类Dev

C#asp.net MVC使用JSON进行自定义错误处理

来自分类Dev

是否有CodeIgniter的全局REQUEST处理程序,或者至少像ASP.NET上的Global.asax中的PHP一样?

来自分类Dev

Global.asax Application_Error NullReference异常

来自分类Dev

将应用程序启动方法中的Global.asax.cs文件变量传递给我的控制器asp.net mvc4

来自分类Dev

在没有MVC的纯ASP.NET Web API服务中,我们仍然需要Global.asax中的AreaRegistration.RegisterAllAreas()吗?

来自分类Dev

在global.asax中实现自定义错误

来自分类Dev

在global.asax中实现自定义错误

来自分类Dev

我的Helpers.vbhtml文件导致“类型'ASP.global_asax'未定义”

来自分类常见问题

编译错误:两个DLL中都存在类型'ASP.global_asax'

来自分类Dev

如何在C#中将Global.asax页面添加到asp.net 4.5版本中?

来自分类Dev

global.asax中的Application_Error无法捕获WebAPI中的错误

来自分类Dev

使用Global.asax与Automapper进行自定义映射

来自分类Dev

ASP.NET Core 3.1中的自定义错误处理中间件?

来自分类Dev

我找不到Global.asax,如何在启动类的Webform 4.5中处理Application_Error?

来自分类Dev

App_Global.asax.compiled和App_Global.asax.dll丢失了吗?WebApi .NET 4.5项目

来自分类Dev

在Global.asax Application_Error()中记录什么以及忽略什么?

来自分类Dev

为什么没有调用两个启动项目的ASP.net解决方案中的`Global.asax.cs`文件之一?

来自分类Dev

ASP.NET MVC如何在不重写URL的情况下处理Application_Error的404错误

来自分类Dev

Azure上global.asax中的异常处理

Related 相关文章

  1. 1

    使用Global.asax asp.net的自定义错误

  2. 2

    在ASP.NET MVC 4中的Global.asax中获取服务器

  3. 3

    在ASP.NET MVC应用程序中的Global.asax级别配置最新版本的AutoMapper

  4. 4

    如何将global.asax文件添加到ASP.NET MVC4项目?

  5. 5

    ASP.NET会话状态无法在Web.config和Global.asax中使用

  6. 6

    我的Asp.Net空Web应用程序项目上缺少Global.asax文件

  7. 7

    ASP.Net-Global.asax的存在会阻止并行请求执行?

  8. 8

    如何使用global.asax停止应用程序asp.net

  9. 9

    ASP.NET Global.asax-捆绑中的IE条件样式表

  10. 10

    如何使用global.asax停止应用程序asp.net

  11. 11

    C#asp.net MVC使用JSON进行自定义错误处理

  12. 12

    是否有CodeIgniter的全局REQUEST处理程序,或者至少像ASP.NET上的Global.asax中的PHP一样?

  13. 13

    Global.asax Application_Error NullReference异常

  14. 14

    将应用程序启动方法中的Global.asax.cs文件变量传递给我的控制器asp.net mvc4

  15. 15

    在没有MVC的纯ASP.NET Web API服务中,我们仍然需要Global.asax中的AreaRegistration.RegisterAllAreas()吗?

  16. 16

    在global.asax中实现自定义错误

  17. 17

    在global.asax中实现自定义错误

  18. 18

    我的Helpers.vbhtml文件导致“类型'ASP.global_asax'未定义”

  19. 19

    编译错误:两个DLL中都存在类型'ASP.global_asax'

  20. 20

    如何在C#中将Global.asax页面添加到asp.net 4.5版本中?

  21. 21

    global.asax中的Application_Error无法捕获WebAPI中的错误

  22. 22

    使用Global.asax与Automapper进行自定义映射

  23. 23

    ASP.NET Core 3.1中的自定义错误处理中间件?

  24. 24

    我找不到Global.asax,如何在启动类的Webform 4.5中处理Application_Error?

  25. 25

    App_Global.asax.compiled和App_Global.asax.dll丢失了吗?WebApi .NET 4.5项目

  26. 26

    在Global.asax Application_Error()中记录什么以及忽略什么?

  27. 27

    为什么没有调用两个启动项目的ASP.net解决方案中的`Global.asax.cs`文件之一?

  28. 28

    ASP.NET MVC如何在不重写URL的情况下处理Application_Error的404错误

  29. 29

    Azure上global.asax中的异常处理

热门标签

归档