从 .NET Core Web API 返回错误消息
Posted
技术标签:
【中文标题】从 .NET Core Web API 返回错误消息【英文标题】:Returning error message from .NET Core Web API 【发布时间】:2020-09-07 17:12:13 【问题描述】:我有一个 .NET Core Web API 控制器来处理一个 POST 请求,该请求接受一个 JSON ApiUser 对象并返回一个 ApiUser 对象
[HttpPost]
public ApiUser Post([FromBody] ApiUser model)
return new ApiUser();
假设我想向客户端返回一条错误消息:“电子邮件已存在。” 我不知道如何以简单的方式最好地做到这一点。
我可以向 ApiUser(以及我通过 API 返回的所有其他类)添加一个“ErrorMsg”属性,但不确定这是否是正确的方法。
“Pre-Core”,我会抛出一个 HttpResponseException,Core 不支持它。这很好,因为它会创建一个带有“消息”的简单 JSON,然后我可以抓取它。 (Goofy:我会使用状态 202 Accepted 作为我的客户的标志,表明我们有一个“已知错误”。)
throw new HttpResponseException(request.CreateErrorResponse(HttpStatusCode.Accepted, msg));
(我想我更愿意在控制器内部处理这个问题,而不是“过滤器”或“中间件”。后两者的一个问题是,如果我添加剃须刀页面,我想我需要知道如果错误来自 api 调用或 UI 网络调用。)
更新 #1
似乎我可以执行以下操作(返回 ActionResult)来模拟我之前使用 HttpResponseException 所做的事情。仍然不确定是否执行这样的操作或通过将 ErrorMsg 添加到 ApiUser 返回状态 200 会更好。
[HttpPost]
public async Task<ActionResult<ApiUser>> Post([FromBody] ApiUser model)
...
if (emailExists) return StatusCode(400, "Email already exists.");
else return user;
【问题讨论】:
类似/相同的问题:***.com/questions/41464540/…***.com/questions/47142142/… 【参考方案1】:您可以在核心 web api 中使用HttpResponseException
:
[HttpPost]
public ApiUser Post([FromBody] ApiUser model)
if (model.Email == "11")// this condition can be changed as your requirement.
var response = new HttpResponseMessage(HttpStatusCode.BadRequest);
response.Content = new StringContent("Email already exists.");
throw new HttpResponseException(response);
return new ApiUser();
这是测试结果:
更新
您也可以将返回类型更改为IActionResult
以返回不同的内容,如下所示:
[HttpPost]
public IActionResult Post([FromBody] ApiUser model)
if (model.Email == "11")// this condition can be changed as your requirement.
return BadRequest("Email already exists.");
return Ok(new ApiUser());
测试结果和之前一样。
【讨论】:
如果我安装一个名为“Microsoft.AspNet.WebApi.Core”的包,我似乎仍然可以使用“HttpResponseException”,但自 2018 年以来一直没有更新。我不确定是最好的解决方案。很棒的视频。我刚刚安装了 Postman 来帮助我进行测试。 @ErnieThomason,如果您不想使用 HttpResponseException,您可以将返回类型更改为IActionResult
,作为您在问题中更新的方法,但有一些细节需要更改,我已在我的帖子中更新,您可以关注它。
非常感谢您的帮助。这为我提供了有关我的选择的足够信息,以便我可以继续前进。以上是关于从 .NET Core Web API 返回错误消息的主要内容,如果未能解决你的问题,请参考以下文章