我正在使用ASP.NET Boilerplate框架,并且创建了一个自定义应用程序服务,该服务继承自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
(如果记录不存在),它将返回null
,并且HTTP Status是200,而不是我想要的404。
如果我将LINQ函数更改为First
或理想情况下更改为Single
,则抛出异常,但HTTP状态为500。
我可以检查记录是否存在,但是如何从应用程序服务返回不同的HTTP状态?
答案 0 :(得分:1)
您应该考虑在应用程序服务中使用存储库获取方法。
请参阅 https://aspnetboilerplate.com/Pages/Documents/Repositories#base-repository-methods
Repository.Get()
返回null时,EntityNotFoundException
的原因将抛出FirstOrDefault
。
当Abp包装响应时,EntityNotFoundException会将NotFound作为HttpStatusCode