Web api接口返回值类型详解

 

Web api接口返回值类型详解

Web api的接口返回值主要有四中类型

  1. Void无返回值
  2. IHttpActionResult
  3. HttpResponseMessage
  4. 自定义类型

 

 

一、     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派上了用场。

posted @ 2020-11-23 09:32  寻找现实的感觉  阅读(1885)  评论(0编辑  收藏  举报