如何处理 asp.net 3.0 应用程序中 CustomAutorize 属性中的错误

2024-01-03

我正在开发一个 asp.net MVC 3.0 应用程序。我正在使用我自己的 CustomRoleProvider 和 CustomErrorHandler 通过覆盖默认属性。

一切都运转良好。但是,问题出在异常处理上。

在测试应用程序时,测试人员给出了无效的数据库连接来测试。

结果是,自定义错误处理程序没有渲染错误视图,而是路由原始路径

For ex:

我正在运行我的应用程序

Home/Index

首先点击自定义角色提供程序来获取应用程序的角色

由于数据库连接不正确,因此引发“无法连接”异常

现在,不再与此错误消息一起路由到错误视图。它正在路由到主控制器和索引操作。

**The code for my Custom Error Handler is as Follows**



public class CustomHandleErrorAttribute : HandleErrorAttribute    // Error handler 
    {
        public override void OnException(ExceptionContext filterContext)
        {
            if (filterContext.ExceptionHandled || !filterContext.HttpContext.IsCustomErrorEnabled)
            {
                return;
            }
            if (new HttpException(null, filterContext.Exception).GetHttpCode() != 500)
            {
                return;
            }
            if (!ExceptionType.IsInstanceOfType(filterContext.Exception))
            {
                return;
            }

            // if the request is AJAX return JSON else view.
            if (filterContext.HttpContext.Request.Headers["X-Requested-With"] == "XMLHttpRequest")
            {
                filterContext.Result = AjaxError(filterContext.Exception.Message, filterContext);
            }
            else
            {
                filterContext.ExceptionHandled = true;
                var controllerName = (string)filterContext.RouteData.Values["controller"];
                var actionName = (string)filterContext.RouteData.Values["action"];
                var model = new HandleErrorInfo(filterContext.Exception, controllerName, actionName);

                filterContext.Result = new ViewResult
                {
                    ViewName = View,
                    MasterName = Master,
                    ViewData = new ViewDataDictionary<HandleErrorInfo>(model),
                    TempData = filterContext.Controller.TempData
                };
            }

        }
        protected JsonResult AjaxError(string message, ExceptionContext filterContext)
        {
            if (String.IsNullOrEmpty(message))
                message = "Something went wrong while processing your request. Please refresh the page and try again.";
            filterContext.HttpContext.Response.StatusCode = (int)HttpStatusCode.InternalServerError;
            filterContext.HttpContext.Response.TrySkipIisCustomErrors = true;
            return new JsonResult { Data = new { ErrorMessage = message }, ContentEncoding = System.Text.Encoding.UTF8, JsonRequestBehavior = JsonRequestBehavior.AllowGet };
        }
    }

在上面的代码中,设置filterContext.Result之后。它没有按预期呈现错误视图。

请纠正/建议我,我哪里出错了..

Updated:

public class CustomRoleProvider : RoleProvider // 自定义角色提供者 { 公共覆盖字符串[] GetRolesForUser(字符串用户名) {

          // Fetching roles for user from database 
    }

// 其他一些方法

} 该方法正在生成异常,因为它正在尝试连接到错误的连接

更新2:

1)我对整个控制器使用自定义错误处理程序。

2)我需要捕获所有异常,包括Ajax错误

3)我已经在上面包含了自定义错误处理程序的代码

4)我还在整个控制器中使用 CustomRole Provider

5)在这里,我试图通过给出错误的数据库连接来生成异常

6)我正在运行 URL:Home/Index

7) 在访问该 URL 之前,它会调用 Role Provider 类中的方法,因为我将其用作属性

8)由于我给出了错误的数据库连接,它正在生成异常

9) 然后,它触发自定义错误处理程序的异常方法

10) 为错误视图构建错误模型

11) 但是,问题就在这里。它不会渲染 Error View ,而是会索引 Home Controller 的方法。

12)但是,我需要在此处呈现错误视图,因为它无法连接到数据库并获取角色。我希望进一步执行 URL Home/Index 在此停止。

希望这能澄清问题……我正在遇到。请随时向我询问更多详细信息/澄清


HandleError被设计为能够注册multiple过滤器(例如针对不同的异常)。一个过滤器只能处理某些特定的异常或错误情况,而另一个未处理的情况可以由另一个过滤器处理HandleError。我想目前both标准和你的[CustomHandleError]应用过滤器。您可以设置Order属性为一个整数值,指定从 -1(最高优先级)到任何正整数值的优先级。整数值越大,过滤器的优先级越低。您可以使用Order http://msdn.microsoft.com/en-us/library/system.web.mvc.filterattribute.order%28v=vs.108%29.aspx例如参数(请参见此处)以使您的过滤器之前正常工作。您可以在以下位置找到更完整的订单描述:MSDN 文档 http://msdn.microsoft.com/en-us/library/system.web.mvc.handleerrorattribute%28v=vs.108%29.aspx#specifying_the_order_property.

答案 https://stackoverflow.com/a/1977261/315935, this one https://stackoverflow.com/a/5072037/315935 and 文章 http://www.aspnet101.com/2011/01/asp-net-mvc-error-handling-using-the-handleerror-filter/例如提供小用法示例Order的财产HandleError.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何处理 asp.net 3.0 应用程序中 CustomAutorize 属性中的错误 的相关文章

随机推荐

  • 使用JNI而不是JNA调用本机代码?

    与 JNI 相比 JNA 似乎更容易用来调用本机代码 在什么情况下您会使用 JNI 而不是 JNA JNA 不支持 C 类的映射 因此如果您使用 C 库 则需要 jni 包装器 如果你需要大量的内存复制 例如 您调用一个方法 该方法返回一个
  • 在 Pygame 上播放 midi

    好的 这就是我得到的 import pygame import sys from pygame locals import bif bg jpg mif pkmn png sif bubble png song 1 testaudio mi
  • base64 解码的文件不等于原始未编码的文件

    我有一个普通的pdf文件 A pdf 第三方以base64对该文件进行编码 并将其作为长字符串在网络服务中发送给我 我无法控制第三方 我的问题是 当我使用 java org apache commons codec binary Base6
  • 什么是好的、众所周知的 JavaScript MVC 模式?

    在 ASP NET MVC 应用程序中管理 JavaScript 文件和函数 对象上下文的最佳方法是什么 谷歌说http javascriptmvc com http javascriptmvc com
  • 在 Quartz 作业中使用 CDI

    我想知道是否可以在 Quartz 作业中以可移植的方式使用 CDI bean 我已经尝试编写自己的 JobFactory 等 但问题是 BeanManager 无法通过 JNDI 使用 因为作业在非托管线程中运行 我的应用程序服务器是 We
  • React组件的render函数中返回DOM元素

    我有一个外部库 可以呈现一些自定义 js 控件 该库返回一个可以插入到页面中的 DOM 元素 我正在 React 中为这个库创建包装器 我已经将所有内容都连接起来 但我不确定如何允许渲染函数接受 DOM 元素作为其返回 render if
  • 如何在 HtmlAgilityPack 中按类获取元素

    你好 我制作 HttpWebResponse 并获取包含我需要的所有数据的 Html 页面 例如带有日期信息的表 我需要将它们保存到数组列表并将其保存到 xml 文件 html 页面示例 table tr td class padding5
  • 如何在 元素内创建标签?

    我想在输入元素内插入描述性文本 当用户单击它时该描述性文本就会消失 我知道这是一个很常见的技巧 但我不知道该怎么做 最简单 更好的解决方案是什么 如果您使用的是 HTML5 则可以使用placeholder属性
  • 这是什么样的排序?

    假设我有一个整数列表 其中每个元素都是 1 到 20 之间的数字 这不是我要排序的内容 现在 我有一个 操作 数组 其中每个操作 Removes列表中的某些 已知 数字 and Adds列表中的某些其他 已知 号码 and如果列表在操作开始
  • 使用 Underscore JS 对 JSON 数组进行分组和聚合

    我有一个 json 数组对象 我想根据 FlexCategoryName 列对数据进行分组 并对矩阵列执行聚合 例如 成本 平均值 点击 总和等 下面是 JSON 数组对象 Array 100 0 Object 1 Object 2 Obj
  • 我将如何计算数组中每个字母数字的数量? (美国PL)

    我不知道如何获取矩阵并计算每行的字母数字值的数量 我只会采用具有我正在计算的值的矩阵 例如 如果我得到 ABA455 7L9O36G DZLFPEI 第一行我会得到类似 A 2 B 1 4 1 5 2 的内容 并且每一行都会独立计数 如果您
  • 带片段的 ViewPager - onPause()、onResume()?

    使用时ViewPager带着碎片 我们的onPause onResume在选项卡之间移动时不会调用方法 有没有什么方法可以让我们在片段中弄清楚我们何时变得可见或隐藏 不幸的是我有逻辑onResume onPause 就像注册位置服务一样 切
  • 在深度嵌套的字典中查找键

    我有很多嵌套字典 我试图找到嵌套在某处的某个键 例如这个钥匙叫做 水果 我如何找到这个键的值 H vard 的递归解决方案可能会没问题 除非嵌套级别太高 然后你会得到一个RuntimeError maximum recursion dept
  • 我可以使用一个控制器更新 AngularJS 中的两个视图吗?

    是否可以将两个视图绑定到一个控制器 以便无论数据在何处 视图1 视图2或模型中 发生更改 两个视图都会更新 它应该像这个例子一样工作 消除混乱
  • Python函数的参数长度? [复制]

    这个问题在这里已经有答案了 可能的重复 如何找出Python中方法的数量 https stackoverflow com questions 990016 how to find out the arity of a method in p
  • RabbitMQ:如何在标头交换中使用复杂表达式?

    下面是死信队列中消息的标头 我正在使用 RabbitMQ TypeId com example queue TesteDTO correlationId dfbc9457 8de6 9b77 b7ad b259d1e2ede4 sequen
  • Google SignInButton 的 onClick 无法使用数据绑定

    当我尝试设置onClick我的 Google 中的方法SignInButton android onClick gt viewModel onGoogleLoginClick 我总是收到这个错误 发现数据绑定错误 数据绑定错误 msg 找不
  • 如何从 NSDate 中找到一周的开始?

    我正在实现一个日历视图 我希望它从包含特定日期的一周开始开始 例如 如果目标日期是 2016 年 2 月 29 日星期一 并且当前日历设置为从星期日开始 我希望我的视图从 2 月 28 日星期日开始 这看起来应该很简单 let calend
  • ASP.NET Web API 中的多个 PUT 方法

    我有一个控制器Groups通过以下行动 public GroupModel Get int ID public GroupModel Post CreateGroupModel model public void Put PublicUpd
  • 如何处理 asp.net 3.0 应用程序中 CustomAutorize 属性中的错误

    我正在开发一个 asp net MVC 3 0 应用程序 我正在使用我自己的 CustomRoleProvider 和 CustomErrorHandler 通过覆盖默认属性 一切都运转良好 但是 问题出在异常处理上 在测试应用程序时 测试