【发布时间】: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;
}
【问题讨论】: