C# 从WebApi向客户端返回错误消息时引发异常是一种错误做法吗?

C# 从WebApi向客户端返回错误消息时引发异常是一种错误做法吗?,c#,asp.net-core,exception,asp.net-core-webapi,C#,Asp.net Core,Exception,Asp.net Core Webapi,当前,我的WebApi抛出一个异常,以便在发生任何错误时在客户端显示消息。事实证明,这很方便,因为我可以将异常包装在BadRequest()响应中,并且它在客户端得到了很好的处理。 我只是想知道这种糟糕的做法和天气,我是否应该返回一个带有错误标志+消息的对象,或者类似的东西。然后我将不得不更改客户端代码来处理这个 前。 原料药 [HttpPost(“登录”)] [异名] 公共异步任务LoginAsync([FromBody]LoginJS凭据) { 尝试 { var result=await\u

当前,我的WebApi抛出一个异常,以便在发生任何错误时在客户端显示消息。事实证明,这很方便,因为我可以将异常包装在
BadRequest()
响应中,并且它在客户端得到了很好的处理。 我只是想知道这种糟糕的做法和天气,我是否应该返回一个带有错误标志+消息的对象,或者类似的东西。然后我将不得不更改客户端代码来处理这个

前。 原料药

[HttpPost(“登录”)]
[异名]
公共异步任务LoginAsync([FromBody]LoginJS凭据)
{
尝试
{
var result=await\u accountRepository.authenticateSync(credentials.Username,credentials.Password);
如果(结果、成功)
返回Ok(结果);
其他的
返回错误请求(“登录失败!”);
}
捕获(例外e)
{
返回请求(e.Message);
}
}
public异步任务AuthenticateAsync(字符串用户名、字符串密码)
{
尝试
{
var user=await\u userManager.FindByNameAsync(用户名);
如果(用户!=null)
{
var emailVerified=wait_userManager.IsEmailConfirmedAsync(用户);
如果(!emailVerified)
抛出新异常(“电子邮件地址尚未验证!”);
var signInResult=wait _signInManager.PasswordSignInAsync(用户、密码、false、false);
如果(signInResult.Successed)
{
var roles=await\u userManager.GetRolesAsync(用户);
如果(!roles.Any())
抛出新异常(“对不起,您的帐户尚未设置。”);
var authenticationResponse=await GenerateTokenAsync(用户,roles.ToList());
返回authenticationResponse;
}                       
}
抛出新异常(“登录失败!”);
//这是更好的方式吗?
//返回新的AuthenticationResponse
//{
//Errors=new[]{“登录失败”}
//};
}
捕获(例外e)
{
_logger.LogError(e.Message);
投掷e;
}
}

例外情况应为例外情况。这一特殊情况并不例外。从性能角度来看,异常可能代价高昂。这是另一个解决这个问题的方法

在您的示例中,返回
AuthenticationResponse
是首选方法。您还可以检查
TryXXX
模式,鉴于您的方法是异步的,该模式在这里可能没有用处