在 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.cs
的Configure()
中的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 中处理异常的推荐方法? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章
在 cosmos db 和 asp.net core 中处理请求时发生未处理的异常