当前位置: 首页 > 知识库问答 >
问题:

ASP.NET Core 2 MVC全局异常处理不起作用

穆华彩
2023-03-14

出于演示目的,我在生产环境中运行我的应用程序,而不是在开发环境中。

我在ValuesController中抛出错误。ValuesController如下所示:

public class ValuesController : Controller
{
    public async Task<IActionResult> Details(int id)
    {
        throw new Exception("Crazy Error occured!");
    }
}

我的startup.cs如下所示:

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
    // Global Exception Handling, I run in Production mode
    if (env.IsDevelopment())
    {
        app.UseDeveloperExceptionPage();
    }
    else // I come into this branch
    {
        //app.UseExceptionHandler("/Error/Error");

        // My problem starts here: I cannot redirect to my custom error method... 
        //there is only a standard http 500 screen
        app.UseStatusCodePagesWithReExecute("/Error/CustomError/{0}");
    }

    app.UseStaticFiles();

    app.UseMvc(routes =>
    {
        routes.MapRoute(
            name: "default",
            template: "{controller=Values}/{action=Index}/{id?}");
    });
}
public class ErrorController : Controller
{
    public IActionResult CustomError(string code)
    {
        // I only want to get here in debug, to get the code
        // unfortunately it never happens :/
        return Content("Error Test");
    }
}

共有1个答案

狄凯
2023-03-14

状态代码页面中间件在流水线执行期间不处理未处理的异常,但检查响应状态代码(对于没有正文的响应)。

如果您将action方法修改为类似的内容,您将得到自定义错误页面:

 public async Task<IActionResult> Details(int id)
 {
    return new StatusCodeResult(500);
 }

有关异常处理,请查看useExceptionHandler方法。例如:

app.UseExceptionHandler("/Error/CustomError/500");
 类似资料:
  • 统一错误处理 文档:https://eggjs.org/zh-cn/tutorials/restful.html 自定义一个异常基类 // app / exceptions / http_exceptions.js class HttpExceptions extends Error { constructor(msg='服务器异常', code=1, httpCode=400) {

  • Middleware: 全局异常处理 我们在岩浆的实例其实已经注意到了,compose 的连接方式,让我们有能力精确控制异常。 Koa中间件最终行为强依赖注册顺序,比如我们这里要引入的异常处理,必须在业务逻辑中间件前注册,才能捕获后续中间件中未捕获异常,回想一下我们的调度器实现的异常传递流程。 <?php class ExceptionHandler implements Middleware

  • 在做android项目开发时,大家都知道如果程序出错了,会弹出来一个强制退出的弹出框,这个本身没什么问题,但是这个UI实在是太丑了,别说用户接受不了,就连我们自己本身可能都接受不了。虽然我们在发布程序时总会经过仔细的测试,但是难免会碰到预料不到的错误。 今天就来自定义一个程序出错时的处理,类似iphone的闪退。(虽然闪退也是用户不愿意看到的,但是在用户体验上明显比那个原生的弹窗好多了) 废话不多

  • 问题内容: 有没有一种方法可以在Java中创建全局异常处理程序。我想这样使用: 处理程序可能无法捕获在主体中引发的异常。 马丁 问题答案: 使用Thread.setDefaultUncaughtExceptionHandler。有关示例,请参见Rod Hilton的“ Global Exception Handling ”博客文章。

  • 有没有办法在泽西进行全局异常处理?与其单个资源具有try/catch块,然后调用一些方法来清理所有要发回客户端的异常,我希望有一种方法可以将其放在实际调用资源的地方。这可能吗?如果是这样,怎么做? 相反,where会向Jersey servlet抛出某种Jersey配置的异常: 有: 其中异常将被抛出到我可以拦截并从那里调用的东西。 这实际上只是为了简化所有Jersey资源,并确保返回给客户机的异

  • 本文向大家介绍springboot全局异常处理详解,包括了springboot全局异常处理详解的使用技巧和注意事项,需要的朋友参考一下 一、单个controller范围的异常处理 说明: 在controller中加入被@ExceptionHandler修饰的类即可(在该注解中指定该方法需要处理的那些异常类) 该异常处理方法只在当前的controller中起作用 二、全部controller范围内起