我们有UseExceptionHandler
(处理Exeptions)和UseStatusCodePages
(处理StatusCode)。为什么在ASP.NET Core MVC中我们使用StatusCodeResult
而不仅仅是方便地扩展Exception
?
答案 0 :(得分:2)
UseExceptionHandler
通常用于捕捉意外错误并以更友好的方式预设给用户。
而REST API中的状态代码更为重要,可以向客户端发出特定操作的成功或失败(以及失败的具体原因)。
控制器操作永远不应抛出异常并访问不存在的特定资源(即数据库记录),您应返回404(未找到)。当传递数据无效时,休息apis返回" 400错误请求",成功200.当创建新资源201时(使用"位置"标题包含新资源的URL,请参阅控制器类的CreatedAtAction
方法。)
对于视图,在将错误直接呈现到HTML代码中的情况下,它的工作方式不同。您还可以使用MVC-esque视图控制器返回状态代码,并使用UseStatusCodePages
处理它(即显示不存在的资源的通用NotFound.cshtml模板)。
此外,您的问题听起来像是要使用例外来设置状态代码,出于几个原因这是错误的。
例外应该(顾名思义)例外;阅读:当意外发生时。例如,如果您尝试从您的银行帐户中提取负余额并进一步处理,则没有任何意义或变得不可能。
如果您预计会出现错误,则应返回结果或以不同方式处理。对于验证,您应该使用Result类(即来自ASP.NET Core Identity的IdentityResult
,其中包含Success
属性和一个属性,该属性包含操作或验证失败时的错误消息列表。
if/switch
和战略模式之类的模式。例外只会使代码难以理解且难以维护。