Web API中的返回值类型
WebApi中的返回值类型大致可分为四种: Void/ IHttpActionResult/ HttpResponseMessage /自定义类型
一、Void
void申明方法没有返回值,执行成功后返回204状态码。使用起来十分简单:
public class NewsController : ApiController
{
[HttpPost]
public void AddNews(News news)
{
}
}
前端Ajax请求代码:
$(function () {
$.ajax({
type: 'post',
url: 'http://localhost:60761/api/News',
data: { Id: , Title: "新闻1", Desc: '这是第一条新闻' },
success: function (data) {
alert(data);
}
})
})
二、IHttpActionResult
2.1 json
和MVC一样,Web API中的IHttpActionResult也提过Json方法来返回JsonReuslt类型。
List<News> newsList = new List<News>
{
new News{Id=,Title="新闻1",Desc="这是新闻1"},
new News{Id=,Title="新闻2",Desc="这是新闻2"},
new News{Id=,Title="新闻3",Desc="这是新闻3"},
};
[HttpGet]
public IHttpActionResult GetUserList()
{
//Json<T>方法返回一个JsonResult,JsonResult是IHttpActionResult的实现类
return Json<List<News>>(newsList);
}
前端ajax请求代码:
$(function () {
$.ajax({
type: 'get',
url:'http://localhost:60761/api/News',
data: {},
success: function (data) {
console.log(data)
}
})
});
Json方法也支持返回匿名类型,如下:
[HttpGet]
public IHttpActionResult GetUserList()
{
//Json方法返回一个JsonResult,JsonResult是IHttpActionResult的实现类
var list = newsList.Where(n => n.Id > ).Select(n => new { n.Title, n.Desc });
return Json(list);
}
2.2 Ok和NotFound
Ok()和Ok(T content)返回一个OkResult实例,OkResult是IHttpActionResult的实现类
2.2.1 Ok返回简单类型
[HttpGet]
public IHttpActionResult GetUserList()
{
//Ok<T>方法返回一个OkResult,OkResult是IHttpActionResult的实现类
return Ok<string>("成功了!");
//return Ok<List<News>>(newsList);
}
前端ajax请求代码:
$(function () {
$.ajax({
type: 'get',
url:'http://localhost:60761/api/News',
data: {},
success: function (data) {
console.log(data)
}
})
});
2.2.2 Ok返回复杂类型
List<News> newsList = new List<News>
{
new News{Id=,Title="新闻1",Desc="这是新闻1"},
new News{Id=,Title="新闻2",Desc="这是新闻2"},
new News{Id=,Title="新闻3",Desc="这是新闻3"},
}; [HttpGet]
public IHttpActionResult GetNewsList()
{
//Ok<T>方法返回一个OkResult,OkResult是IHttpActionResult的实现类
//return Ok<string>("成功了!");
return Ok<List<News>>(newsList); }
2.2.3 NotFound 返回404
List<News> newsList = new List<News>
{
new News{Id=,Title="新闻1",Desc="这是新闻1"},
new News{Id=,Title="新闻2",Desc="这是新闻2"},
new News{Id=,Title="新闻3",Desc="这是新闻3"},
}; public IHttpActionResult GetNewsListById(int id)
{
//NotFound方法返回一个NotFoundResult实例,
//NotFoundResult实现了IHttpActionResult接口,返回404
News news = newsList.Where(n => n.Id == id).SingleOrDefault();
if (news==null)
{
return NotFound();
}
else
{
return Json<News>(news);
}
前端ajax请求:
$(function () {
$.ajax({
type: 'get',
url:'http://localhost:60761/api/News',
data: {id:},
success: function (data) {
console.log(data)
}
})
});
2.3 其他类型
IHttpActionResult的实现类还有几种,使用起来也十分简单,列举如下:
2.3.1 Content
public IHttpActionResult Get()
{
return Content<string>(HttpStatusCode.OK, "成功了!");
}
2.3.2 BadRequest
public IHttpActionResult Get()
{
return BadRequest("错误请求!");
}
2.3.3 Redirect(string)
public IHttpActionResult Get()
{
return Redirect("http://localhost:60761/api/News/Welcome");
} [Route("api/News/Welcome")]
[HttpGet]
public IHttpActionResult RedirectHere()
{
return Content(HttpStatusCode.OK, "跳转成功!");
}
2.4 自定义类型(IHttpActionResult的实现类)
IHttpActionResult只有一个接口方法: ExecuteAsync ,这个方法的作用就是 异步地返回HttpResponseMessage 。一个返回分页结果的栗子:
//分页结果类实现IHttpActionResult
public class PageResult : IHttpActionResult
{
object _value;
HttpRequestMessage _request;
public PageResult(object value,HttpRequestMessage request)
{
_value = value;
_request = request;
} //只有这一个接口方法
public Task<HttpResponseMessage> ExecuteAsync(CancellationToken cancellationToken)
{
var response = new HttpResponseMessage()
{
Content = new ObjectContent(typeof(object), _value, new JsonMediaTypeFormatter()),
StatusCode = HttpStatusCode.OK,
ReasonPhrase = "服务器留言内容",
RequestMessage=_request
};
return Task.FromResult(response);
}
} List<News> newsList = new List<News>
{
new News{Id=,Title="新闻1",Desc="这是新闻1"},
new News{Id=,Title="新闻2",Desc="这是新闻2"},
new News{Id=,Title="新闻3",Desc="这是新闻3"},
};
//在Action中返回分页结果类型
public IHttpActionResult Get(int offset,int limit)
{
var result = newsList.Skip(offset).Take(limit);
return new PageResult(result, Request);
}
前端ajax调用:
$(function () {
$.ajax({
type: 'get',
url:'http://localhost:60761/api/News',
data: {offset:,limit:},
success: function (data) {
console.log(data)
}
})
});
三、HttpResponseMessage
我们可以直接返回HttpResponseMessage,通常使用 request.CreateResponse 方法生成一个HttpResponseMessage对象。
public HttpResponseMessage Get(int offset,int limit)
{
var result = newsList.Skip(offset).Take(limit);
return Request.CreateResponse(HttpStatusCode.OK, newsList, "application/json");
}
四、其他类型
我们也可以像写普通方法返回List,string,Array...等类型,WebAPI在管道事件会使用媒体格式化器(Media-type formmater)这些类型自动序列化,如我们返回一个List集合:
public List<News> Get(int offset,int limit)
{
var result = newsList.Skip(offset).Take(limit);
return newsList;
}
参考文献:
1.http://www.cnblogs.com/landeanfen/p/5501487.html
3.https://blog.csdn.net/lwpoor123/article/details/78644998
Web API中的返回值类型的更多相关文章
- ASP.NET Web API 中的返回数据格式以及依赖注入
本篇涉及ASP.NET Web API中的返回数据合适和依赖注入. 获取数据 public IEnumerable<Food> Get() { var results = reop.Get ...
- Asp.net MVC 中Controller返回值类型ActionResult
[Asp.net MVC中Controller返回值类型] 在mvc中所有的controller类都必须使用"Controller"后缀来命名并且对Action也有一定的要求: 必 ...
- Controller 中Action 返回值类型 及其 页面跳转的用法
•Controller 中Action 返回值类型 View – 返回 ViewResult,相当于返回一个View 页面. -------------------------------- ...
- ASP.NET MVC中Controller返回值类型ActionResult
1.返回ViewResult视图结果,将视图呈现给网页 public class TestController : Controller { //必须存在Controller\Test\Index.c ...
- MVC 中Controller返回值类型ActionResult
下面列举Asp.net MVC中Controller中的ActionResult返回类型 1.返回ViewResult视图结果,将视图呈现给网页 public ActionResult About() ...
- dotNET开发之MVC中Controller返回值类型ActionResult方法总结
1.返回ViewResult视图结果,将视图呈现给网页 2. 返回PartialViewResult部分视图结果,主要用于返回部分视图内容 3. 返回ContentResult用户定义的内容类型 4. ...
- MyBatis中Mapper的返回值类型
insert.update.delete语句的返回值类型 对数据库执行修改操作时,数据库会返回受影响的行数. 在MyBatis(使用版本3.4.6,早期版本不支持)中insert.update.del ...
- ResultMap和ResultType在使用中的区别、MyBatis中Mapper的返回值类型
在使用mybatis进行数据库连接操作时对于SQL语句返回结果的处理通常有两种方式,一种就是resultType另一种就是resultMap,下面说下我对这两者的认识和理解 resultType:当使 ...
- ASP.NET Web API 2 的返回结果
HttpResponseMessage IHttpActionResult void 某些其他类型 总结归纳 原文地址:https://www.cnblogs.com/xgzh/p/11208611. ...
随机推荐
- BZOJ1001 洛谷4001 [BJOI2006]狼抓兔子 题解
题目 这个题目有多种解法,这个题也是一个比较经典的题了,正是因为他的多样的做法,这个题主要难在建图和优化,因为这是一个网格图,所以spfa肯定过不去,所以用最短路解法的话,只能用dij,而网络流也是要 ...
- 关于2-sat的建图方法及解决方案
转载增减: https://blog.csdn.net/qq_24451605/article/details/47126143 https://blog.csdn.net/u012915516/ar ...
- sql里的正则表达式
SQL语句还可以搭配正则表达式作为查询条件,很是有用. REGEXP_LIKE(匹配)REGEXP_INSTR (包含)REGEXP_REPLACE(替换)REGEXP_SUBSTR(提取) 表 1: ...
- 「HDU6158」 The Designer(圆的反演)
题目链接多校8-1009 HDU - 6158 The Designer 题意 T(<=1200)组,如图在半径R1.R2相内切的圆的差集位置依次绘制1,2,3,到n号圆,求面积之和(n< ...
- [国家集训队]整数的lqp拆分
我们的目标是求$\sum\prod_{i=1}^m F_{a_i}$ 设$f(i) = \sum\prod_{j=1}^i F_{a_j}$那么$f(i - 1) = \sum\prod_{j=1}^ ...
- [luogu2571][bzoj1857][SCOI2010]传送门【三分套三分】
题目描述 在一个2维平面上有两条传送带,每一条传送带可以看成是一条线段.两条传送带分别为线段AB和线段CD.lxhgww在AB上的移动速度为P,在CD上的移动速度为Q,在平面上的移动速度R.现在lxh ...
- NOI2018d1t1 归程 (dijkstra+kruskal重构树)
题意:给一张无向联通图,每条边有长度和高度,每次询问在高度大于p的边,从v点能到达的所有点到1号点的最短距离(强制在线) 首先dijkstra求出每个点到1号点的距离 易知:如果我按高度从高到低给边排 ...
- HDU--1540 Tunnel Warfare(线段树区间更新)
题目链接:1540 Tunnel Warfare 以为单组输入 这个题多组输入 结构体记录每个区间左边和右边的连续区间 ms记录最大 在查询操作时: 1.这个点即将查询到右区间 看这个点 x 是否存在 ...
- [学习笔记]FWT——快速沃尔什变换
解决涉及子集配凑的卷积问题 一.介绍 1.基本用法 FWT快速沃尔什变换学习笔记 就是解决一类问题: $f[k]=\sum_{i\oplus j=k}a[i]*b[j]$ 基本思想和FFT类似. 首先 ...
- git的使用命令
git archive --format zip --output "./test.zip" master -0 将项目的代码通过上述命令打包压缩为test文件夹 ssh-keyg ...