gpt4 book ai didi

c# - 从 asp.net Controller 中删除 Try/Catch 语句

转载 作者:行者123 更新时间:2023-12-03 08:06:49 28 4
gpt4 key购买 nike

我有一个 Asp.Net core 3.1 Web Api 项目,其中有很多 Controller 。

几乎在每个 Controller 中我都有一个这样的模板:

public class SomeController:ControllerBase

{
//injecting my service

[HttpGet]
[Route("")]
public async Task<ActionResult> SomeMethod()

{
try
{
//Do some work
return Ok(somevalue);
}

catch(ServiceException ex)
{
return BadRequest(ex.Message);
}
catch
{
return BadRequest();
}
}
}

几乎所有 Controller 都实现了该模板。

我想删除 try...catch 语句并编写一个基类或其他东西来在我的 Controller 外部处理此 try...catch 语句。

我认为是这样的:

public async Task<ActionResult> SomeMethod()

{
//Do some work

return Ok(somevalue);
//if any exception of ServiceException type occured i want to
//return BadRequest with message and if not a BadRequest without message
}

我听说过一些有关横切关注点的内容,但我不知道如何使用它们。

你有什么想法我该怎么做吗?

最佳答案

完全同意,任何地方都实现了 try/catch 的东西都是代码味道,并且有更好的方法来做事情。

如果您搜索“Global Exception Handling netcore”,您会发现很多关于此主题的搜索结果。

一般来说,让异常在堆栈中传播,保留所有异常详细信息,并让中间件捕获和处理它。可能有点太多代码无法摘录到这个答案中,但这是一篇不错的文章,其中有几个不同的版本/示例可用

https://jasonwatmore.com/post/2022/01/17/net-6-global-error-handler-tutorial-with-example

您会注意到中间件返回响应,这也是您集中执行日志记录的机会 - 一个捕获和记录所有异常详细信息的地方。

关于c# - 从 asp.net Controller 中删除 Try/Catch 语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72061109/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com