ASP.NET MVC 5 错误处理

2023-12-09

我们想要处理 403 错误、404 错误以及由于以下原因导致的所有错误MySpecialDomainException并为所有其他错误(包括 IIS 配置中的错误!)提供默认错误页面。所有错误都应该返回正确的 Razor 视图,如果有一个ErrorController在视图前面。E.g.像这样的东西:

public class ErrorController : Controller
{
    public ViewResult NotFound () { return View(); }
    public ViewResult Forbidden () { return View(); }
    public ViewResult Default ()
    {
        var ex = ObtainExceptionFromSomewhere();
        if(ex is MySpecialDomainException)
            return View("MySpecialDomainException", new ErrorModel { Exception = ex });

        return View("GeneralError", new ErrorModel { Exception = ex });
    }
}

目前,您可以在 www 上找到许多不同的方法来做到这一点,其中一些很可能已经过时了。在这些:

  • 控制器.OnException()
  • 错误过滤器
  • web.config 中的 customErrors 元素
  • Global.asax 的 Application_Error 中的处理

Q1:使用 ASP.NET MVC 5 满足我们的要求的推荐方法是什么?

我们还希望捕获 IIS 主机中发生的错误。Q2:为了防止 IIS 必须处理任何 404,我们考虑添加一个与所有可能的 URL 相匹配的默认路由 - 这值得推荐吗?最好也注册 IIS 的 404?

Q3:是否甚至可以注册返回到控制器的 IIS 错误页面,或者 IIS 是否仅支持 ASPX/静态 HTML?


最好的方法是使用 Global.Asax,因为您可以管理所有类型的错误(Ajax 调用/所有意外错误)。与其他人你做不到。

像这样:

protected void Application_Error()
{
    HttpContext httpContext = HttpContext.Current;
    if (httpContext != null)
    {
        RequestContext requestContext = ((MvcHandler)httpContext.CurrentHandler).RequestContext;
        /* When the request is ajax the system can automatically handle a mistake with a JSON response. 
           Then overwrites the default response */
        if (requestContext.HttpContext.Request.IsAjaxRequest())
        {
            httpContext.Response.Clear();
            string controllerName = requestContext.RouteData.GetRequiredString("controller");
            IControllerFactory factory = ControllerBuilder.Current.GetControllerFactory();
            IController controller = factory.CreateController(requestContext, controllerName);
            ControllerContext controllerContext = new ControllerContext(requestContext, (ControllerBase)controller);

            JsonResult jsonResult = new JsonResult
            {
                Data = new { success = false, serverError = "500" },
                JsonRequestBehavior = JsonRequestBehavior.AllowGet
            };
            jsonResult.ExecuteResult(controllerContext);
            httpContext.Response.End();
        }
        else
        {
            httpContext.Response.Redirect("~/Error");
        }
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

  • 在 CPP 类中将 C 函数声明为友元

    我需要在 C 函数中使用类的私有变量 我正在做这样的事情 class Helper private std string name public std getName return name friend extern C void in
  • Grpc - 将消息从一个客户端发送到连接到同一服务器的另一个客户端

    是否可以将消息从一个客户端发送到连接到同一服务器的另一个客户端 我想将数据从一个客户端发送到服务器然后发送到特定客户端 我想我需要获取客户端 ID 但我不知道如何获取此 ID 以及如何从服务器将此消息发送到该客户端 我这里有一个样本 这是一
  • 有些有助于理解“产量”

    在我不断追求少吸的过程中 我试图理解 产量 的说法 但我不断遇到同样的错误 someMethod 的主体不能是迭代器块 因为 System Collections Generic List 不是迭代器接口类型 这是我被卡住的代码 forea
  • 强制初始化模板类的静态数据成员

    关于模板类的静态数据成员未初始化存在一些问题 不幸的是 这些都没有能够帮助我解决我的具体问题的答案 我有一个模板类 它有一个静态数据成员 必须为特定类型显式实例化 即必须专门化 如果不是这种情况 使用不同的模板函数应该会导致链接器错误 这是
  • RestSharp获取序列化输出

    我正在寻找一种方法来访问 AddBody 调用的序列化结果 我正在使用内置的 RestSharp 序列化器 例子 class Foo public string FooField void SendRecord var f new Foo
  • 在 C# 中,如何根据在 gridview 行中单击的按钮引用特定产品记录

    我有一个显示产品网格视图的页面 该表内有一列 其中有一个名为 详细信息 的超链接 我想这样做 以便如果用户单击该特定产品的详细信息单元格 将打开一个新页面 提供有关该产品的更多信息 我不确定如何确定哪个Product记录链接的详细信息以及我
  • 如何使用 Regex.Replace 从字符串中删除数字?

    我需要使用Regex Replace从字符串中删除所有数字和符号 输入示例 123 abcd33输出示例 abcd 请尝试以下操作 var output Regex Replace input d string Empty The d标识符
  • 不同 C++ 文件中的相同类名

    如果两个 C 文件具有相同名称的类的不同定义 那么当它们被编译和链接时 即使没有警告也会抛出一些东西 例如 a cc class Student public std string foo return A void foo a Stude
  • 获取没有显式特征的整数模板参数的有符号/无符号变体

    我希望定义一个模板类 其模板参数始终是整数类型 该类将包含两个成员 其中之一是类型T 另一个作为类型的无符号变体T 即如果T int then T Unsigned unsigned int 我的第一直觉是这样做 template
  • 在 C# 中检查 PowerShell 执行策略的最佳方法是什么?

    当你跑步时Get ExecutionPolicy在 PowerShell 中 它得到有效的执行政策 https learn microsoft com en us powershell module microsoft powershell
  • 不可变类与结构

    以下是类与 C 中的结构的唯一区别 如果我错了 请纠正我 类变量是引用 而结构变量是值 因此在赋值和参数传递中复制结构的整个值 类变量是存储在堆栈上的指针 指向堆上的内存 而结构变量作为值存储在堆上 假设我有一个不可变的结构 该结构的字段一
  • 将二变量 std::function 转换为单变量 std::function

    我有一个函数 它获取两个值 x 和 y 并返回结果 std function lt double double double gt mult double x double y return x y 现在我想得到一个常量 y 的单变量函数
  • 如何在 C# 中创建异步方法?

    我读过的每一篇博客文章都会告诉您如何在 C 中使用异步方法 但由于某些奇怪的原因 从未解释如何构建您自己的异步方法来使用 所以我现在有这段代码使用我的方法 private async void button1 Click object se
  • 比较:接口方法、虚方法、抽象方法

    它们各自的优点和缺点是什么 接口方法 虚拟方法 抽象方法 什么时候应该选择什么 做出这一决定时应牢记哪些要点 虚拟和抽象几乎是一样的 虚方法在基类中有一个实现 可以选择重写 而抽象方法则没有 并且must在子类中被覆盖 否则它们是相同的 在
  • 模板类的模板构造函数的 C++ 显式模板特化

    我有一个像这样的课程 template
  • Visual Studio 2015:v120 与 v140?

    仅供参考 Win10 x64 我今天开始尝试 Visual Studio 2015 在弄清楚如何运行 C C 部分后 我尝试加载一个大型个人项目 该项目使用非官方的glsdk http glsdk sourceforge net docs
  • 如何在 sql azure 上运行 aspnet_regsql? [复制]

    这个问题在这里已经有答案了 可能的重复 将 ASP NET 成员资格数据库迁移到 SQL Azure https stackoverflow com questions 10140774 migrating asp net membersh
  • 为什么空循环使用如此多的处理器时间?

    如果我的代码中有一个空的 while 循环 例如 while true 它将把处理器的使用率提高到大约 25 但是 如果我执行以下操作 while true Sleep 1 它只会使用大约1 那么这是为什么呢 更新 感谢所有精彩的回复 但我
  • 在 System.Type 上使用条件断点时出错

    这是函数 public void Init System Type Type this Type Type BuildFieldAttributes BuildDataColumns FieldAttributes 我在第一行设置了一个断点
  • 我可以使用 lambda 函数或 std::function 对象来代替函数指针吗?

    我有一个需要使用的库 它定义了以下内容 typedef void CallbackFunction const int i 并且有一个注册回调的函数 如下所示 void registerCallback CallbackFunction p

随机推荐

  • 如何:使用 wix 工具集使程序在 Windows 启动时启动?

    我有简单的 Hello world Windows 窗体应用程序 在 VS 2013 中创建 如何使用 WIX Toolset 使应用程序在 Windows 启动时启动 必须在 Windows 7 和 Windows 8 中运行 这是我目前
  • 带有 angularjs 的材料设计 md-tabs

    我有一个关于材料设计 md tabs 控制的问题 我在其中一个页面上使用 md tabs 和 Angularjs 效果很好 我在该页面上还有一个 md 按钮 我们想要做的是 当用户单击该按钮时 我们想要移动到下一个选项卡 我对整个材料角度的
  • Java 类型泛型作为 GSON 的参数

    在 GSON 中获取你所做的对象列表 Gson gson new Gson Type token new TypeToken
  • 使用 MongoDB 压缩数组

    是否可以在 mongo 文档中压缩数组 我指的是 zip 的函数式编程定义 其中相应的项被配对成元组 更准确地说 我想从这样的 mongo 文档开始 A A1 A2 A3 B B1 B2 B3 C 100 0 200 0 300 0 最终得
  • 连接到与登录 google colab 不同的 google 驱动器

    最近 colab 删除了从您在 google 云端硬盘中登录的帐户以外的其他帐户连接到 google 云端硬盘的功能 有人发布了一个使用以下代码的解决方法 效果很好 直到现在 apt get install y qq software pr
  • 理解结构等价

    我有两种类型的结构等价思想我正在努力理解 VAR 1 int VAR 2 pointer to VAR 1 所以在这里 我觉得它们在结构上是等效的 因为从技术上讲 这些类型都指向整数类型 对吗 但如果你有类似的东西 VAR 3 pointe
  • Crystal Report Viewer 打印/导出按钮在 ASP.NET MVC 应用程序中不起作用

    我的 MVC 应用程序使用推送模型和 CR 查看器进行报告 在查看器中显示报告时一切都很好 但是打印 导出按钮给出了 JavaScript 错误 此操作不支持对象 我正在使用 VS 2008 和 MVC 这发生在我的开发环境中 有任何想法吗
  • Android 中的自定义字体(适用于整个应用程序)[重复]

    这个问题在这里已经有答案了 我有这个 android 代码 其中有许多类 每个类都有不同的视图 我们可以进入设置并根据所选的字体更改其字体 目前仅预装的 Android 字体可用 有没有办法稍微调整我的代码 以便我可以添加 ttf 文件并将
  • 如何知道 Azure 服务器是否使用 TLS 1.2

    我们有一个托管在 Azure 服务器中的 Web 应用程序 使用 Azure 服务器中的 api 出于安全目的 我们想知道服务器是否处于 tls 1 2 之下 我想对于非云服务器 我们只需在 regedit 中查看即可知道 我已经看到有关如
  • 线程是内核对象吗?

    在这本书中 我读到每个实例Thread类实际上正在分配一个内核对象 这是使用的开销之一Thread 据我所知 线程不是内核对象 在这种情况下只有进程是内核对象 进程包含的线程不是内核对象 有人可以解释一下吗 线程首先是一个托管对象 你知道S
  • 如何将 JavaScript 侦听器添加到 PrimeFaces Ajax 事件

    我想通过javascript方法监听pickList传输事件 侦听器与 java bean 配合良好
  • Django + Mongo + Docker 获取 pymongo.errors.ServerSelectionTimeoutError

    我一直在努力使用 Django Djongo Mongodb 和 Docker Compose 运行一个简单的应用程序 我的设置如下所示 docker compose yml services mongodb image mongo lat
  • PackageMaker 的“在包中包含根”选项实际上有什么作用?

    我正在为 OS X 应用程序制作安装程序 但无法理解 PackageMaker 的 UI 我的 PackageMaker 版本是 3 0 4 与 Lion 和 Xcode 4 1 一起运行 其中一个选项尤其让我感到困惑 这是编辑包内容时的
  • 为什么我必须最后调用 super -dealloc,而不是首先调用?

    正确的例子 void dealloc viewController release window release super dealloc 错误的例子 void dealloc super dealloc viewController r
  • 删除QListView背景

    我想删除我的 QListView 的背景 以便可以看到下面的背景 我怎样才能做到这一点 I tried setAttribute Qt WA NoSystemBackground and setAttribute Qt WA NoBackg
  • 通过pywin32将pandas数据框写入word文档表

    我目前正在编写一个脚本 需要写入 docx 文件以进行演示 我使用 pandas 来处理脚本中的所有数据计算 我希望使用 PyWIN32 将 pandas 数据帧写入 word docx 文件中书签处的表中 数据框由浮点数组成 伪代码是这样
  • 如何创建其中包含永久提示的编辑文本

    我有一个编辑文本 用户在其中输入金额 我想要做的是在其前面设置一个用户不可编辑的文本视图值 例如 INR 然后用户将在其前面输入金额 我希望 edittext 看起来像下面的那样 我怎样才能做到这一点
  • Laravel 4 Auth with Facebook(无密码身份验证)

    我正在尝试使用 Laravel 4 设置一个通过 Facebook 登录的身份验证系统 我正在为 Laravel 4 使用 madewithlove laravel oauth2 包 当然 当用户使用 Facebook 登录时 没有密码可以
  • ElementTree(1.3.0) Python中XML解析的高效方法

    我正在尝试解析一个巨大的 XML 文件 20MB 3GB 文件是来自不同仪器的样本 所以 我正在做的是从文件中查找必要的元素信息并将它们插入到数据库 Django 中 我的文件样本的一小部分 命名空间存在于所有文件中 文件的有趣特征是它们有
  • ASP.NET MVC 5 错误处理

    我们想要处理 403 错误 404 错误以及由于以下原因导致的所有错误MySpecialDomainException并为所有其他错误 包括 IIS 配置中的错误 提供默认错误页面 所有错误都应该返回正确的 Razor 视图 如果有一个Er