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

https://github.com/aspnetboilerplate/aspnetboilerplate/blob/6bce9a0572170e8daf1b21ee982a869714579e2d/src/Abp/Domain/Repositories/AbpRepositoryBase.cs#L73-L82

并且当 Abp 包装响应时,EntityNotFoundException 将 NotFound 作为 HttpStatusCode

https://github.com/aspnetboilerplate/aspnetboilerplate/blob/15e5f33885442bfd0996936191fd964144a95652/src/Abp.AspNetCore/AspNetCore/Mvc/ExceptionHandling/AbpExceptionFilter.cs#L99-L102