为什么Web API控制器操作中有大量的返回类型?

时间:2017-08-31 21:58:04

标签: asp.net-web-api

有人可以提供有关Web API控制器可能的各种操作返回类型的用途,优点和缺点的解释吗?

我的意思是,每个人之间有什么区别?

public T Get(int id) { ... }
public IActionResult Get(int id) { ... }
public Task<IActionResult> Get(int id) { ... }
public async Task<IActionResult> Get(int id) { ... }
public IHttpActionResult Get(int id) { ... }
public HttpResponseMessage Get(int id) { ... }

我看到上述所有内容都在使用中,并想知道为什么以及建议的最佳做法是什么?

1 个答案:

答案 0 :(得分:1)

public T Get(int id){...} - &gt;您返回的对象将被序列化为json / xml并返回为Http内容。无法控制HTTP响应的其余部分

public IActionResult Get(int id){...} - &gt;主要用于ASP.NET MVC。允许返回不同类型的ActionResults(即ViewResult,FileResult,JsonResult等),其中一些用于在MVC中返回正确的View。

公共任务获取(int id){...} - &gt;如上所述,但将结果包装在任务中。任务用于允许异步编程在不使用时释放线程。但是,在没有async修饰符的情况下,它只是开销。

公共异步任务Get(int id){...} - &gt;允许在方法体内使用await关键字以异步方式执行合适的方法

public IHttpActionResult Get(int id){...} - &gt;默认情况下是异步的。指定创建HttpResponseMessage对象的命令。您可以利用辅助方法(即Ok(),NotFound(),Redirect()等)来创建响应,并且您可以完全控制返回的HTTP响应(内容,标题等)哦,它使单元测试更容易!

public HttpResponseMessage Get(int id){...} - &gt;如上所述,但您必须自己创建HttpResponseMessage。再次完全控制Http响应。

对于WebApi,我会说最佳做法是 IHttpActionResult 。除非你正在构建一些非常简单的东西,否则你只需返回T。

您可以在MSDN文档中找到更多详细信息。