ASP.NET MVC 中的错误处理

2023-12-01

如何正确处理 ASP.NET MVC 中控制器抛出的异常?这HandleError属性似乎只处理 MVC 基础结构引发的异常,而不处理我自己的代码引发的异常。

使用这个 web.config

<customErrors mode="On">
    <error statusCode="401" redirect="/Errors/Http401" />
</customErrors>

用下面的代码

namespace MvcApplication1.Controllers
{
    [HandleError]
    public class HomeController : Controller
    {
        public ActionResult Index()
        {
            // Force a 401 exception for testing
            throw new HttpException(401, "Unauthorized");
        }
    }
}

没有达到我所希望的结果。相反,我收到通用 ASP.NET 错误页面,告诉我修改 web.config 以查看实际的错误信息。但是,如果我返回无效视图而不是抛出异常,则会得到 /Shared/Views/Error.aspx 页面:

return View("DoesNotExist");

像我上面所做的那样在控制器中抛出异常似乎绕过了所有HandleError那么创建错误页面的正确方法是什么以及如何很好地使用 MVC 基础设施呢?


Controller.OnException(ExceptionContext context)。覆盖它。

protected override void OnException(ExceptionContext filterContext)
{
    // Bail if we can't do anything; app will crash.
    if (filterContext == null)
        return;
        // since we're handling this, log to elmah

    var ex = filterContext.Exception ?? new Exception("No further information exists.");
    LogException(ex);

    filterContext.ExceptionHandled = true;
    var data = new ErrorPresentation
        {
            ErrorMessage = HttpUtility.HtmlEncode(ex.Message),
            TheException = ex,
            ShowMessage = !(filterContext.Exception == null),
            ShowLink = false
        };
    filterContext.Result = View("ErrorPage", data);
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ASP.NET MVC 中的错误处理 的相关文章

随机推荐

  • VB.Net默认表单实例

    我已替换 正则表达式 所有对默认表单实例在我的项目中 我现在想确保我不再使用默认实例 似乎默认实例功能无法禁用 不改变类的ctor 任何人都知道如何在 VB Net 中查找默认表单实例的所有用法 或者 使用类名访问非共享成员 仅供参考 我正
  • 使用 python Flask 从数据库中删除行?

    我正在使用 Flask 框架 似乎无法从数据库中删除行 下面的代码给出了 405 错误 所请求的 URL 不允许使用该方法 有任何想法吗 在py中 app route delete
  • 如何在 jquery 中包含 !important

    我正在尝试使用 jQuery 在 css 属性中添加 important tabs css height 650px important 但是 important 没有效果 如何在 jquery 中包含 important 显然可以在 jQ
  • 运算符重载:无法添加两个指针

    我创建了一个 Fraction 类 它具有用于在两个 Fraction 对象之间进行加 减 乘和除的成员函数以及所需的默认构造函数和复制构造函数 对于这个问题 我必须使用指针 不能使用向量 因为只有用户选择才能创建 Fraction 对象
  • GatsbyJS 与 Firebase - WebpackError:ReferenceError:IDBIndex 未定义

    我收到错误盖茨比发展 它与这个非常相似 https github com firebase firebase js sdk issues 2222 但我收到错误盖茨比发展 而不是盖茨比构建 我做了很多研究 但找不到有效的解决方案 起初我有一
  • MySQL 内连接查询语法错误

    我是一个 MySQL 新手 无法弄清楚这里出了什么问题 我有两张桌子 左表称为 锻炼 相关列是date 输入日期 和id 类型 int 右表称为Workout locations 相关领域 workout id type int and l
  • 通过撰写导航传递 Parcelable 参数

    我想传递一个可分割的对象 BluetoothDevice 使用组合导航转换为可组合项 传递原始类型很容易 composable profile userId arguments listOf navArgument userId type
  • 以同样的方式随机化两个数组 Swift

    我知道有一种新的随机播放方法iOS 9但我想知道是否有办法以相同的方式对两个数组进行洗牌 例如 1 2 3 4 and a b c d shuffle 3 4 1 2 and c d a b 使用shuffle 方法来自如何在 Swift
  • 如何使用表达式来调用以通用列表作为参数的方法调用?

    我们正在使用非常优秀的字符串生成器在我们的项目中作为 ToString 实现的高性能 通用支持 它在调试方面工作得很好 直到我需要生成对象图的字符串表示形式以检查它在加载和关闭之间是否发生了变化 以前我曾使用 MemoryStream 将对
  • swift 中函数和泛型函数的区别

    我想知道 swift Function 和 Generic 函数之间的区别 函数和泛型函数的作用相同 谁能告诉我泛型函数的确切用法 func simpleMin
  • 与矩形以外的形状碰撞..?

    我已经习惯了仅使用矩形进行碰撞检测 所以现在有点困惑 我正在处理类似钻石的形状 在过去的几个小时里 一直在试图找出如何检查碰撞 我尝试检查第一个对象的四个点是否在第二个对象的点内 但这只是形成一个盒子 我认为 我觉得自己在这方面遇到困难的原
  • 一维数组中的唯一值,无需迭代

    冒着成为话题的风险 我决定分享一些代码 问答式 如果普遍认为这是偏离主题的 我会很乐意在需要时删除 Background 我们可以从任何一维数组中检索所有唯一值 或者Range对象变成一维数组 而不必迭代其元素 就我而言 普遍的共识是 必须
  • Node.js:如何顺序运行异步代码

    我有这段代码 User find function err users for var i 0 i lt users length i pseudocode Friend find user curUser id function err
  • 调用线程无法访问此对象,因为不同的线程拥有它。WPF [重复]

    这个问题在这里已经有答案了 每当我刷新标签时 都会收到此错误 调用线程无法访问该对象 因为另一个线程拥有它 我尝试调用但失败了 我正在使用 WPF 表单 delegate void lostfocs string st private vo
  • python 计算日期时间差

    我正在编写 timediff 函数来计算 2 个给定日期时间之间的时间 秒 差 def timediff time1 time2 timeformat d b Y H M S time1 01MAR2016 07 11 53 time2 0
  • strtotime('第一个星期一 ..') 当是该月的第一天时返回错误的日期

    echo date Y m d strtotime First Monday date F o strtotime 4 months 上面的代码返回 2012 10 08 这是不正确的 2012 年 10 月的第一个星期一应该返回 2012
  • NSUserDefaults 不保存 TextField 文本 (Swift)

    我正在尝试使用 Swift 创建一个游戏 并且我想添加创建用户名的功能 该用户名将保存在 NSUserDefaults 中 这是我的代码 println Textfield Text usernameTextfield text NSUse
  • 为什么在将二维数组传递给 C 函数时必须提供维度?

    我不确定是否history标签是相关的 但请随意添加 我认为这是历史原因 这就是我提出这个建议的原因 为什么我无法声明如下所示的函数签名 void foo int doubly indexed array 这使 gcc mem c mem
  • OpenCV 和 QT 退出代码 -1073741701

    After this我发现 OpenCV 给了我这个错误 开始 C Users nikola Documents build ConsoleTry Desktop Qt 5 5 0 MSVC2013 64bit Debug debug Co
  • ASP.NET MVC 中的错误处理

    如何正确处理 ASP NET MVC 中控制器抛出的异常 这HandleError属性似乎只处理 MVC 基础结构引发的异常 而不处理我自己的代码引发的异常 使用这个 web config