在 ASP.NET Core 2 中处理异常的推荐方法? [关闭]

Posted

技术标签:

【中文标题】在 ASP.NET Core 2 中处理异常的推荐方法? [关闭]【英文标题】:Recommended way to handle exceptions in ASP.NET Core 2? [closed] 【发布时间】:2017-12-15 12:26:49 【问题描述】:

我们的团队是 ASP.Net Core 2.0 MVC 开发的新手。我们拥有完全异步的数据库 CRUD 应用程序,控制器和视图都仅通过 MVC6 创建,即没有 WebApi 或任何客户端平台,如 Angular。所有层都是通过MVC6开发的。

现在的问题是在 ASP.Net Core 2.0 MVC 项目中实现异常处理的最佳方法是什么?我们应该为开发和生产环境使用单独的代码吗?我们需要使用中间件吗?或动作过滤器(就像我们在 MVC 5 中使用的那样)是否足够好?

我需要它用于核心 2.0,而不是 1.1。如果您知道任何显示正确代码以在 Core 2.0 MVC 应用程序中实现异常处理中间件的链接,请发送。

【问题讨论】:

首先,没有MVC6这种东西,它只是ASP.Net MVC Core。其次,这个问题太宽泛了,基于意见并且需要外部资源,所有的原因都使它跑题了。 选项是一样的——很多。动作过滤器不是 MVC 6 中的最佳方式,它们是一种 处理以某种方式逃脱动作的异常的方式。有些错误可以由本地异常处理块处理,有些则不能。如果您使用数据库事务,则可以在发生死锁时重试操作。如果您使用乐观并发,您可能必须首先检查修改后的值,并在代码无法解析该做什么时通知用户 “最佳”和“足够好”都是非常主观的术语,取决于您的具体情况,这里没有详细介绍。通常方法的组合适用于涵盖所有可能性。不过我要说的一件事:您问“我们应该为开发和生产环境使用单独的代码吗?”。 IMO 绝对不会,因为这会破坏您的部署管道。不同的config,是的。用于处理某些事情的不同松散耦合的外部组件,可能是的。但是在应用程序中使用不同的代码库并不是一个好主意。 【参考方案1】:

使用Startup.csConfigure()中的UseExceptionHandler中间件:

app.UseExceptionHandler("/Error");

这将在您每次抛出异常时执行/Error 的路由。

当然,您需要添加一个类似于此的ErrorController

[Route("[controller]")]
public class ErrorController : Controller

    [Route("")]
    [AllowAnonymous]
    public IActionResult Get()
    
        return StatusCode(StatusCodes.Status500InternalServerError);
    

更多信息at Microsoft Docs。

有关记录异常的详细信息,请查看this answer。

【讨论】:

感谢您的回答。这种方法也是在核心 2.0 中实现的正确方法吗?我听说代码有一些变化?此链接显示核心 1.1 的代码,而不是 2.0。我说的对吗? 能否请您发送包含适用于核心 2.0 MVC 的正确代码的链接? @Sunil 1.1 中引入了一些东西并不意味着它在 2.0 中不起作用。这行得通,如果我没记错的话,它也是一些默认模板的一部分。 能否请您发送包含适用于核心 2.0 MVC 的正确代码的链接? @Sunil 这是正确的代码。你似乎没有尝试过这个。请不要在这里浪费人们的时间。如果您在这方面遇到错误,请提及它。

以上是关于在 ASP.NET Core 2 中处理异常的推荐方法? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

ASP.NET Core 2 中的依赖注入引发异常

asp.net core 自定义异常处理中间件

ASP.Net Core 异常处理中间件

在 cosmos db 和 asp.net core 中处理请求时发生未处理的异常

使用中间件的全局异常处理在 ASP.Net Core 应用程序中不起作用

如何在 ASP.NET Core 中为 gRPC 服务添加全局异常处理 ?