Web API中的返回值类型

时间:2022-03-02 17:50:17

  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

2.https://www.asp.net/web-api

3.https://blog.csdn.net/lwpoor123/article/details/78644998

Web API中的返回值类型的更多相关文章

  1. ASP&period;NET Web API 中的返回数据格式以及依赖注入

    本篇涉及ASP.NET Web API中的返回数据合适和依赖注入. 获取数据 public IEnumerable<Food> Get() { var results = reop.Get ...

  2. Asp&period;net MVC 中Controller返回值类型ActionResult

    [Asp.net MVC中Controller返回值类型] 在mvc中所有的controller类都必须使用"Controller"后缀来命名并且对Action也有一定的要求: 必 ...

  3. Controller 中Action 返回值类型 及其 页面跳转的用法

        •Controller 中Action 返回值类型 View – 返回  ViewResult,相当于返回一个View 页面. -------------------------------- ...

  4. ASP&period;NET MVC中Controller返回值类型ActionResult

    1.返回ViewResult视图结果,将视图呈现给网页 public class TestController : Controller { //必须存在Controller\Test\Index.c ...

  5. MVC 中Controller返回值类型ActionResult

    下面列举Asp.net MVC中Controller中的ActionResult返回类型 1.返回ViewResult视图结果,将视图呈现给网页 public ActionResult About() ...

  6. dotNET开发之MVC中Controller返回值类型ActionResult方法总结

    1.返回ViewResult视图结果,将视图呈现给网页 2. 返回PartialViewResult部分视图结果,主要用于返回部分视图内容 3. 返回ContentResult用户定义的内容类型 4. ...

  7. MyBatis中Mapper的返回值类型

    insert.update.delete语句的返回值类型 对数据库执行修改操作时,数据库会返回受影响的行数. 在MyBatis(使用版本3.4.6,早期版本不支持)中insert.update.del ...

  8. ResultMap和ResultType在使用中的区别、MyBatis中Mapper的返回值类型

    在使用mybatis进行数据库连接操作时对于SQL语句返回结果的处理通常有两种方式,一种就是resultType另一种就是resultMap,下面说下我对这两者的认识和理解 resultType:当使 ...

  9. ASP&period;NET Web API 2 的返回结果

    HttpResponseMessage IHttpActionResult void 某些其他类型 总结归纳 原文地址:https://www.cnblogs.com/xgzh/p/11208611. ...

随机推荐

  1. Python:Pycharm下无法导入安装好的第三方模块?

    Pycharm下无法导入安装好的第三方模块requests? 在cmd下使用pip安装好requests模块后,可以使用import requests,但在Pycharm IDE下无法导入,出现如下错 ...

  2. 阅读javascript高级程序设计

    第一章 : javascript的简介: js的组成: 1.核心(ECMA) ECMA规定了js的 1,语法 2,保留字 3,关键字, 4,对象, 5,类型 6,操作符 7,语句 2.文档对象模型(D ...

  3. ASCII表

    ASCII(American Standard Code for Information Interchange,美国信息交换标准代码)是基于拉丁字母的一套电脑编码系统,主要用于显示现代英语和其他西欧 ...

  4. HTTP下载文件名称编码说明

    HTTP下载保存文件名 下载文件需要保存的名称 在响应报文头中 Content-Disposition 响应报文头域中指定, 例如 Content-Disposition: attachment; f ...

  5. Xamarin提示Build-tools版本过老

    Xamarin提示Build-tools版本过老 错误信息:G:\XamarinDemo\Xamarin.Forms-master\packages\Xamarin.Android.Support.V ...

  6. centos系统常用软件环境搭建

    yum源制作grub常见问题:http://linux.chinaunix.net/techdoc/beginner/2008/01/04/975921.shtml 系统安装: 2 软件安装:yum ...

  7. 【BZOJ 1053】&lbrack;HAOI2007&rsqb;反素数ant

    Description 对于任何正整数x,其约数的个数记作g(x).例如g(1)=1.g(6)=4.如果某个正整数x满足:g(x)>g(i) 0<i<x,则称x为反质数.例如,整数1 ...

  8. C&num;编写Windows服务程序图文教程

    安装服务程序C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\InstallUtil.exe  要安装的服务程序路径(如F:\***.exe)卸载服务程序C: ...

  9. 安装npm及cnpm&lpar;Windows&rpar;

    [工具官网] Node.js : http://nodejs.cn/ 淘宝NPM: https://npm.taobao.org/ [安装步骤] 一.安装node.js 1.前往node.js官网下载 ...

  10. win7系统64位配置Oracle 的ODBC数据源

    1.安装oracle客户端 2.在如下路径启动odbc数据源 3.选择系统DSN-添加,选择oracle驱动 4.填写信息如下,填写数据源名称等信息后输入用户名和密码测试连接