web api :Action Results in Web API 2
原文:http://www.asp.net/web-api/overview/getting-started-with-aspnet-web-api/action-results
Web api 返回以下四种类型:
void
HttpResponseMessage
IHttpActionResult
其他类型
| 返回类型 | Web API创建的类型 |
|---|---|
| void | 204 (No content) |
| HttpResponseMessage | 直接转为一个HTTP响应消息 |
| IHttpActionResult | 调用ExecuteAsync创建一个HttpResponseMessage,然后转为一个HTTP响应消息 |
| 其他类型 | 将返回类型序列化,然后返回200(ok) |
1.void
如果返回类型是void,Web API简单地反映状态为204(无内容)的空HTTP响应。
代码片段:
public class ValuesController : ApiController
{
public void Post()
{
}
}
HTTP响应:
HTTP/1.1 204 No Content
Server: Microsoft-IIS/8.0
Date: Mon, 27 Jan 2014 02:13:26 GMT
2.HttpResponseMessage
通过HttpResponseMessage的属性可以添加一些控制。
如:
public class ValuesController : ApiController
{
public HttpResponseMessage Get()
{
HttpResponseMessage response = Request.CreateResponse(HttpStatusCode.OK, "value");
response.Content = new StringContent("hello", Encoding.Unicode);
response.Headers.CacheControl = new CacheControlHeaderValue()
{
MaxAge = TimeSpan.FromMinutes(20)
};
return response;
}
}
响应为:
HTTP/1.1 200 OK
Cache-Control: max-age=1200
Content-Length: 10
Content-Type: text/plain; charset=utf-16
Server: Microsoft-IIS/8.0
Date: Mon, 27 Jan 2014 08:53:35 GMT
hello
3.IHttpActionResult
Web API2才引入IHttpActionResult。
优势:
简化Web API的单元测试
将创建HTTP响应的公共逻辑移到独立的类
通过隐藏构造响应的底层细节,使controller action的意图更加清晰
内置的Result主要是从 System.Web.Http.Results 中寻找,如OkResult。
典型的:
public IHttpActionResult Get (int id)
{
Product product = _repository.Get (id);
if (product == null)
{
return NotFound(); // Returns a NotFoundResult
}
return Ok(product); // Returns an OkNegotiatedContentResult
}
4.其他类型
Web API 选择正确的formater来序列化对象,并放置在http响应的Body中。
public class ProductsController : ApiController
{
public IEnumerable<Product> Get()
{
return GetAllProductsFromDB();
}
}
响应:
HTTP/1.1 200 OK
Content-Type: application/json; charset=utf-8
Server: Microsoft-IIS/8.0
Date: Mon, 27 Jan 2014 08:53:35 GMT
Content-Length: 56
[{"Id":1,"Name":"Yo-yo","Category":"Toys","Price":6.95}]
web api :Action Results in Web API 2的更多相关文章
- Action Results in Web API 2
https://docs.microsoft.com/en-us/aspnet/web-api/overview/getting-started-with-aspnet-web-api/action- ...
- Web API 2中的Action Results
[译]Action Results in Web API 2 单击此处查看原文 本文阐述了ASP.NET Web API是如何将controller action的返回值转换为HTTP respons ...
- flutter web in action
flutter web in action flutter for web https://flutter.dev/web https://flutter.dev/docs/get-started/w ...
- 创建以 API 为中心的 Web 应用
http://www.oschina.net/translate/creating-an-api-centric-web-application?from=20130818 正计划着要开始搞一个新的网 ...
- 创建以API为中心的Web应用(转)
英文原文:Creating an API-Centric Web Application 引言 API——API是Application Programming Interface(应用编程接口)的简 ...
- 【Web API2】ASP.NET Web API Security
实现安全的方式既可以是host提供,也可以框架提供. 1,HTTP Module 方式,工作在IIS上,所以web api要托管在IIS上才行.其作用于HTTP管道的最前端,所以这种方式影响的是全局, ...
- ASP.NET Core 中基于 API Key 对私有 Web API 进行保护
这两天遇到一个应用场景,需要对内网调用的部分 web api 进行安全保护,只允许请求头账户包含指定 key 的客户端进行调用.在网上找到一篇英文博文 ASP.NET Core - Protect y ...
- HTML5权威指南--Web Storage,本地数据库,本地缓存API,Web Sockets API,Geolocation API(简要学习笔记二)
1.Web Storage HTML5除了Canvas元素之外,还有一个非常重要的功能那就是客户端本地保存数据的Web Storage功能. 以前都是用cookies保存用户名等简单信息. 但是c ...
- ASP.NET Web API路由系统:Web Host下的URL路由
ASP.NET Web API提供了一个独立于执行环境的抽象化的HTTP请求处理管道,而ASP.NET Web API自身的路由系统也不依赖于ASP.NET路由系统,所以它可以采用不同的寄宿方式运行于 ...
随机推荐
- web前端基础知识-(一)html基本操作
1. HTML概述 HTML是英文Hyper Text Mark-up Language(超文本标记语言)的缩写,他是一种制作万维网页面标准语言(标记).相当于定义统一的一套规则,大家都来遵守他,这样 ...
- Python Day7
概述 面向对象高级语法部分 静态方法.类方法.属性方法 类的特殊方法 反射 静态方法 通过@staticmethod装饰器即可把其装饰的方法变为一个静态方法,什么是静态方法呢?其实不难理解,普通的方法 ...
- 升级到 PHP-7 遇到的坑 及 经验分享
注意:上面这张图是QQ群网友分享的,图中提到的“被移除的函数”,call_user_func 和 call_user_func_array 在 PHP-7.0 的正式版中是可用的,也许是当时的 测试版 ...
- php项目整理之no1
1.login.php <head></head> 2.check_login.php 3.user.php 4.getData.php
- php文件类
1.需求 了解php对文件的一些操作 2.例子 写了一个类,可以操作文件,包含增,删,查 <?php class myfile{ public function write_file($stri ...
- runtime的黑魔法
要说明runtime,首先要明白objc这门语言,是基于C的封装.真是因为runtime,objc才有了面对对象的特性. 也就说,所有objc的语言,在运行时都会转换成C. 也是基于这样的特性,run ...
- Windows请求连接 Vmware+Ubuntu14被拒绝 的幽怨诉说
最近为了学习Linux,在电脑上装了Vmware然后搭建了Ubuntu14的Linux操作系统 搭建完成以后,我兴冲冲的使用TeraTerm进行友情访问发现被拒绝,我很郁闷. 怎么可以这样呢. 然后调 ...
- python 多个 %s 例子
input = , ) input 为: '{"a" : 1234, "b" : "14289", "c": " ...
- MysqlWorkbench连接远程数据
- [转]TextView maxWidth maxLength maxEms 区别
maxWidth=”80dp” 限制TextView最大宽度.必须与layout_width=”wrap_content”搭配使用,当指定layout_width为其他值时,maxWidth会失效. ...