.Net Mvc:如何触发 Application_Error() 管理它们的错误?

2023-12-10

我管理我的所有应用程序错误Application_Error() in 全局.asax:

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

    Log.LogException(exception);

    Response.Clear();

    HttpException httpException = exception as HttpException;

    RouteData routeData = new RouteData();
    routeData.Values.Add("controller", "Erro");

    if (httpException == null)
    {
        routeData.Values.Add("action", "Index");
    }
    else //It's an Http Exception
    {
        switch (httpException.GetHttpCode())
        {
            case 404:
                //Page not found
                routeData.Values.Add("action", "HttpError404");
                break;
            case 500:
                //Server error
                routeData.Values.Add("action", "HttpError500");
                break;

            // Here you can handle Views to other error codes.
            // I choose a General error template  
            default:
                routeData.Values.Add("action", "General");
                break;
        }
    }

    //Pass exception details to the target error View.
    routeData.Values.Add("error", exception);

    //Clear the error on server.
    Server.ClearError();

    //Avoid IIS7 getting in the middle
    Response.TrySkipIisCustomErrors = true;

    //Call target Controller and pass the routeData.
    IController errorController = new ErroController();
    errorController.Execute(new RequestContext(new HttpContextWrapper(Context), routeData));
}

因此,我的应用程序中有一个自定义授权属性来处理未经授权的请求,我想重定向到Application_Error()而是操纵它。

所以,我这样做:

protected override void HandleUnauthorizedRequest(AuthorizationContext context)
{
    if (context.HttpContext.Request.IsAuthenticated)
    {
        throw new HttpException(403, "Forbidden Access.");
    }
    else
    {
        base.HandleUnauthorizedRequest(context);
    }
}

这样一来Application_Error()被调用,但如此直接调用异常对我来说似乎很难看,是否存在另一种方式?你们觉得怎么样?


因为Unauthorized 不是一个错误默认情况下!!! 只需添加这个方法即可global.asax

    protected void Application_EndRequest(object sender, EventArgs e) {
        if (Context.Response.StatusCode == 401 || Context.Response.StatusCode == 403) {
        // this is important, because the 401 is not an error by default!!!
            throw new HttpException(401, "You are not authorised");
        }
    }
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

.Net Mvc:如何触发 Application_Error() 管理它们的错误? 的相关文章

随机推荐

  • 使用 celery 运行“独特”任务

    我使用 celery 来更新我的新闻聚合网站中的 RSS 提要 我为每个提要使用一个 task 并且一切似乎运行良好 有一个细节我不确定处理得很好 所有提要都使用 periodic task 每分钟更新一次 但是如果在启动新任务时提要仍在从
  • 溢出:隐藏在 div 标签上会影响背景颜色

    的定义overflow hidden指出 the overflowing content is completely hidden not accessible to the user from http quirksmode org cs
  • 使用 import java.* 来使用“java”包下的所有子包怎么样?

    import java 为什么我不能进行此导入 我没有导入 java 包的特定子包中的所有类 而是尝试导入 java 包下的所有子包 如何导入所有内置类 java中没有子包这种东西 java util stream不是 的子包java ut
  • STRCHR 与 STRRCHR 有何区别? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心以获得指导 我想知道这两种不同用途之间
  • 通过RemoteView设置GradientDrawable

    这就是我想要做的 我有一个小部件 我想根据用户选择的颜色设置其背景 它必须是一个渐变 背景是通过设置 LinearLayout 的背景来设置的 为了进行测试 我对虚拟背景进行了如下操作 remoteViews setInt R id lay
  • WPF DataBound ListBox 添加动画但不滚动

    我有一个绑定到 ObservableCollection 的 WPF ListBox 当我向其中添加项目时 我想要一些动画来 吸引 新来者 的注意力 有许多使用 DataTemplate 触发器和 FrameworkElment Loade
  • 如何为 Telerik RadGrid 中的列标题指定颜色

    我在 asp net 中创建了一个 telerik RadGrid 我的要求是为列标题提供我自己的颜色 我们怎样才能实现这一点 下面是我正在使用的代码结构
  • Seahorse::Client::NetworkingError 使用 Rails 上传 Amazon S3 文件

    在我的 Rails 4 应用程序中 我尝试使用 aws sdk 下载常规 png 文件 然后将其上传到我的 s3 存储桶 使用gem aws sdk gt 2 在开发环境中 代码运行完全正常 但如果我尝试rails s e producti
  • IBM MQ 客户端在 10 分钟后断开连接:IBM.XMS.IllegalStateException

    我正在使用 IBM 的这个示例 我刚刚复制并粘贴了代码 https github com ibm messaging mq dev patterns blob master dotnet dotNetGet cs 我正在连接到 MQ 服务器
  • 如何初始化参数化构造函数的对象数组

    我需要初始化参数化构造函数的对象数组 我怎样才能以最好的方式做到这一点 include
  • 当您使用 Seq(1,2,3) 创建 Seq 对象时会发生什么?

    当您评估表达式时到底会发生什么 Seq 1 2 3 我是 Scala 新手 现在对各种集合类型有点困惑 Seq是一种特质 对吗 所以当你这样称呼它时 Seq 1 2 3 它一定是某种伴生对象吗 或不 它是某种扩展的类吗Seq 最重要的是 返
  • 在 Xamarin 应用程序中使用 Identity Server

    我正在尝试让 Xamarin 应用程序与身份服务器一起使用 我已按照以下步骤操作 1 下载这个 https github com IdentityModel IdentityModel OidcClient Samples tree mas
  • 为什么这段显示图像的代码在构建到 jar 中时会出现“错误”?

    我想通过在 JLabel 上绘制 BufferedImage 来显示图像 x y Offset是在JLabel的中间绘制一个较小的图像 如果我在 IDE 中运行代码 它会正常工作并在我的 JFrame 上显示图像 如果我现在将类构建到 ja
  • 使用 Unicode emoji 动态创建 NSString

    我有字符串 Hi there U0001F603 它正确显示了表情符号 例如Hi there 如果我把它放在UILabel 但我想像这样动态创建它 NSString stringWithFormat Hi there U0001F60 ld
  • 了解分支预测

    有一些关于分支预测的疑问我无法自信地弄清楚 假设我必须使用静态分支预测器 分支预测应该发生在管道的哪个阶段 如何知道预测出错了 数据路径如何知道发生了错误预测 如果它知道发生了错误预测 它如何发送信号以占用未占用的分支 出了问题后 我必须占
  • 在通过代码连接的两个表之间使用更新时出错

    是以下 python pandas DataFrame ID country money code money add other time 832932 Other NaN 00000 NaN N2 N2 N4 0 days 01 37
  • 如何使用值从字典中删除条目

    我有一个字典集合如下 mydic addvalue key1 val1 mydic addvalue key2 val1 mydic addvalue key3 val1 mydic addvalue key4 val2 mydic add
  • 从嵌入式网络聊天发送事件

    我正在尝试从嵌入式网络聊天发送和接收事件 该网络聊天遵循本示例中的网站代码https github com ryanvolum backChannelBot并且机器人实现了来自的代码Bot框架获取内嵌聊天控制页面的ServiceUrl埃泽奎
  • Java - 冻结鼠标

    有没有办法在Java中将鼠标锁定在一个位置一段时间 我试过这个 while timer true Robot bot new Robot bot mouseMove x y 但是 当用户移动鼠标时 它会令人不愉快地来回跳跃 从用户拖动的位置
  • .Net Mvc:如何触发 Application_Error() 管理它们的错误?

    我管理我的所有应用程序错误Application Error in 全局 asax protected void Application Error object sender EventArgs e Exception exception