有人可以提供有关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) { ... }
我看到上述所有内容都在使用中,并想知道为什么以及建议的最佳做法是什么?
答案 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文档中找到更多详细信息。