如何在ASP.NET Core API中使用IResult返回单一类型结果?
ASP.NET Core 7控制器中使用IResult返回单一类型的最佳实践
问题背景
我计划使用ASP.NET Core 7和控制器开发新API,希望遵循最佳实践返回类型化结果以简化文档。
原本使用ActionResult<List<Products>>的代码可行:
[HttpGet()] public ActionResult<List<Products>> GetAllProducts() { var beers = repository.GetAllProducts(); return beers; }
但出于一致性考虑,我想改用IResult的派生类返回结果,直接使用Results<Products>会报错,因为Results要求至少两种返回类型:
[HttpGet()] public Results<Products> GetAllProducts() { var beers = repository.GetAllProducts(); return beers; }
临时添加一个不需要的BadRequest类型虽然能运行,但不合理:
[HttpGet()] public Results<Products,BadRequest> GetAllProducts() { var beers = repository.GetAllProducts(); return beers; }
请问若要使用IResult且仅返回一种类型,推荐的返回类型是什么?还是只能使用ActionResult<List<Products>>?我希望代码更简洁现代,只想使用基于IResult的类型,不想混合IActionResult。
解决方案
方案1:直接返回IResult配合Results.Ok()
这是最简洁的方式,完全基于IResult体系,无需指定多余的返回类型:
[HttpGet()] public IResult GetAllProducts() { var products = repository.GetAllProducts(); return Results.Ok(products); }
方案2:使用TypedResults.Ok增强类型提示
如果需要更精准的类型信息以优化API文档生成,可以用TypedResults的强类型方法:
[HttpGet()] public IResult GetAllProducts() { var products = repository.GetAllProducts(); return TypedResults.Ok(products); }
这两种方案都不需要依赖IActionResult,符合现代、简洁且统一的IResult返回风格,同时能让API文档工具正确识别返回结构。
内容的提问来源于stack exchange,提问作者Joe Markov
相关产品推荐
相关产品推荐

