Web api接口返回值类型详解
Web api接口返回值类型详解
Web api的接口返回值主要有四中类型
- Void无返回值
- IHttpActionResult
- HttpResponseMessage
- 自定义类型
一、 Void 返回值
方法是使用void申明的方法,在success方法里面得不到返回值,并且会返回http状态码204,告诉客户端此请求没有返回值。
二 IHttpActionResult
IHttpActionResult类型是WebApi里面比较重要的一种返回值类型。
1. Json<T>(T content)
在MVC中请求数据的接口返回值类型大部分使用的是JsonResult,
在webapi中我们定义的返回值类型是IHttpActionResult类型,直接返回Json<T>(T content)
我们将Json 转到定义看看:protected internal JsonResult<T> Json<T>(T content);
继续将JsonResult<T>转到定义: public class JsonResult<T>:IHttpAciontResult
原来JsonResult<T>是实现了IHttpActionResult接口的
实体类可以直接传递
[HttpPost]
public IHttpActionResult GetStudent(List<Student> stu) {
List<Student> studentList = stu;
//return stu[0].Name;
return Json<List<Student>>(studentList);
}
匿名类型,我们很多时候返回前端的对象都没有对应的实体来对应,我们要返回就在Json<T><T content>必须要传一个对应的泛型类型。如果是匿名类型这里肯定不好传。还好有我们的object类型,可以通过dynamic
2. Ok()、Ok<T><T content>
除了Json<T>(T content),在ApiController里面还有另一个比较常用的方法:Ok().
如果返回Ok(),就表示不同客户端返回任何信息,只告诉客户端请求成功。
除了Ok()之外,还有另一个重载Ok<T>(T Content)
这种用法和Json<T>(T content)比较类似,如果你非要问这两者有什么区别,或者说怎么选择两者。那么我的理解是如果是返回实体或者实体集合,建议使用Json<T>(T content),如果是返回基础类型(如int、string等),使用Ok<T>(T content)。
3.NotFound()
当需要向客户端返回找不到记录时,有时需要NotFound()方法
NotFound()方法会返回一个404的错误到客户端。
4、其他
Content<T>(HttpStatusCode statusCode, T value)
向客户端返回值和http状态码。
BadRequest()
向客户端返回400的http错误。
Redirect(string location)
将请求重定向到其他地方。
三、HttpResponseMessage
在上文自定义IHttpActionResult返回类型的时候,提到过HttpResponseMessage这个对象。它表示向客户端返回一个http响应的消息对象(包含http状态码和需要返回客户端消息)。独特的使用场景:需要向客户端返回HttpResponse时就要用到这个对象。已导出为例子,将导出的excel文件输出到客户端浏览器,webapi的服务端需要向web的客户端输出文件流,这个时候一般的IhttpActionResult对象不方便解决这个问题,于是HttpReponseMessage派上了用场。