WebApi 接口返回值不困惑:返回值类型详解。IHttpActionResult、void、HttpResponseM

时间:2021-12-11 23:23:49

首先声明,我还没有这么强大的功底,只是感觉博主写的很好,就做了一个复制,请别因为这个鄙视我,博主网址:

使用过Webapi的园友应该都知道,Webapi的接口返回值主要有四种类型

void无返回值

IHttpActionResult     (需要MVC高版本才会支持,VS2012/2013不支持,请升级DLL文件或者到VS2015开发环境)

HttpResponseMessage

自定义类型

此篇就围绕这四块分别来看看它们的使用。

一、void无返回值

void关键字我们都不陌生,它申明方法没有返回值。它的使用也很简单,我们来看一个示例就能明白。

   public class ORDER { public string ID { get; set; } public string NO { get; set; } public string NAME { get; set; } public string DESC { get; set; } }

   public class OrderController : ApiController { [HttpPost] public void SaveOrder(ORDER name) { //处理业务逻辑
} }

在Web里面调用

$(function () { $.ajax({ type: ‘post‘, url: ‘:21528/api/Order/SaveOrder‘, data: { ID: "aaa", NAME: "test" }, success: function (data, status) { alert(data); } }); });

得到结果

可以看到,使用void申明的方法,在success方法里面得不到返回值,并且会返回http状态码204,告诉客户端此请求没有返回值。

二、IHttpActionResult

IHttpActionResult类型是WebApi里面非常重要的一种返回值类型。下面博主就根据平时在项目里面使用最多的几种方式来讲解下这种类型的返回值的一些用法。

1、Json<T>(T content)

使用MVC开发过的朋友一定记得,在MVC里面,请求数据的接口的返回值类型大部分使用的是JsonResult,在MVC里面你一定也写过类似这样的接口:

     public JsonResult GetResult() { return Json(new { }, JsonRequestBehavior.AllowGet); }

那么,在WebAPI里面是否也存在类似的用法呢。呵呵,在这点上面,微软总是贴心的。在WebApi的ApiController这个抽象类里面,为我们封装了Json<T>(T content)这个方法,它的用法和MVC里面的JsonResult基本类似。我们通过一个例子来说明它的用法:

     [HttpGet] public IHttpActionResult GetOrder() { var lstRes = new List<ORDER>(); //实际项目中,通过后台取到集合赋值给lstRes变量。这里只是测试。 lstRes.Add(new ORDER() { ID = "aaaa", NO = "111", NAME = "111", DESC = "1111" }); lstRes.Add(new ORDER() { ID = "bbbb", NO = "222", NAME = "222", DESC = "2222" }); return Json<List<ORDER>>(lstRes); }

看到这个代码,有人就疑惑了,我们定义的返回值类型是IHttpActionResult类型,直接返回Json<T>(T content)这样可行么?我们将Json转到定义看看:

protected internal JsonResult<T> Json<T>(T content);

我们继续将JsonResult<T>转到定义

原来JsonResult<T>是实现了IHttpActionResult接口的,难怪可以直接返回呢。

知道了这个,我们直接在Web里面通过ajax请求来调用:

$(function () { $.ajax({ type: ‘get‘, url: ‘:21528/api/Order/GetOrder‘, data: {}, success: function (data, status) { alert(data); } }); });

来看结果: