Return 来自应用程序服务的不同 HTTP 状态代码
Return different HTTP status codes from Application Service
我正在使用 ASP.NET 样板框架,我创建了一个继承自 AsyncCrudAppServiceBase 的自定义应用程序服务,并且我已经覆盖了 Get
函数。
public override async Task<ExampleDto> Get(EntityDto<int> input)
{
var example = await Repository.GetAll().FirstOrDefault(x => x.Id == input.Id);
return ObjectMapper.Map<ExampleDto>(example);
}
但是,因为我正在使用 FirstOrDefault
如果记录不存在,它 returns null
并且 HTTP 状态是 200 而不是我想要的 404。
如果我将 LINQ 函数更改为 First
,或者理想情况下,Single
,则会抛出异常,但 HTTP 状态为 500。
我可以检查记录是否存在,但我如何return来自应用程序服务的不同 HTTP 状态?
您应该考虑在您的应用服务中使用存储库获取方法。
见
https://aspnetboilerplate.com/Pages/Documents/Repositories#base-repository-methods
原因是 Repository.Get()
当 FirstOrDefault
return 为空时将抛出 EntityNotFoundException
。
并且当 Abp 包装响应时,EntityNotFoundException 将 NotFound 作为 HttpStatusCode
我正在使用 ASP.NET 样板框架,我创建了一个继承自 AsyncCrudAppServiceBase 的自定义应用程序服务,并且我已经覆盖了 Get
函数。
public override async Task<ExampleDto> Get(EntityDto<int> input)
{
var example = await Repository.GetAll().FirstOrDefault(x => x.Id == input.Id);
return ObjectMapper.Map<ExampleDto>(example);
}
但是,因为我正在使用 FirstOrDefault
如果记录不存在,它 returns null
并且 HTTP 状态是 200 而不是我想要的 404。
如果我将 LINQ 函数更改为 First
,或者理想情况下,Single
,则会抛出异常,但 HTTP 状态为 500。
我可以检查记录是否存在,但我如何return来自应用程序服务的不同 HTTP 状态?
您应该考虑在您的应用服务中使用存储库获取方法。
见 https://aspnetboilerplate.com/Pages/Documents/Repositories#base-repository-methods
原因是 Repository.Get()
当 FirstOrDefault
return 为空时将抛出 EntityNotFoundException
。
并且当 Abp 包装响应时,EntityNotFoundException 将 NotFound 作为 HttpStatusCode