这是msdn原文文档!明天用,留存。

Web API 控制器操作可以返回以下任何内容:

  1. void
  2. HttpResponseMessage
  3. IHttpActionResult
  4. 其他类型

根据返回的这种情况,Web API 将使用不同的机制来创建 HTTP 响应。

返回类型
Web API 如何创建响应

void  返回空的204(无内容)
HttpResponseMessage 直接转换为 HTTP 响应消息。
IHttpActionResult 调用ExecuteAsync创建HttpResponseMessage,然后将其转换为 HTTP 响应消息。
其他类型 将序列化的返回值写入响应正文;返回200(OK)。

void

如果返回类型为void,Web API 只会返回一个空 HTTP 响应,状态代码为204(无内容)。

public class ValuesController : ApiController
{
public void Post()
{
}
}

Http相应:

HTTP/1.1  No Content
Server: Microsoft-IIS/8.0
Date: Mon, Jan :: GMT

HttpResponseMessage

如果操作返回HttpResponseMessage,Web API 会将返回值直接转换为 HTTP 响应消息,并使用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()
};
return response;
}
}

响应:

HTTP/1.1  OK
Cache-Control: max-age=
Content-Length:
Content-Type: text/plain; charset=utf-
Server: Microsoft-IIS/8.0
Date: Mon, Jan :: GMT hello

IHttpActionResult

Web API 2 中引入了IHttpActionResult接口。 实质上,它定义了HttpResponseMessage工厂。 下面是使用IHttpActionResult接口的一些优点:

  • 简化控制器的单元测试
  • 将用于创建 HTTP 响应的公共逻辑移到单独的类中。
  • 通过隐藏构造响应的低级别细节,使控制器操作的意图更清晰。

IHttpActionResult包含单一方法ExecuteAsync,它以异步方式创建HttpResponseMessage实例。

public interface IHttpActionResult
{
Task<HttpResponseMessage> ExecuteAsync(CancellationToken cancellationToken);
}

如果控制器操作返回IHttpActionResult,Web API 将调用ExecuteAsync方法来创建HttpResponseMessage。 然后,将HttpResponseMessage转换为 HTTP 响应消息。

下面是创建纯文本响应的IHttpActionResult的简单实现:

public class TextResult : IHttpActionResult
{
string _value;
HttpRequestMessage _request; public TextResult(string value, HttpRequestMessage request)
{
_value = value;
_request = request;
}
public Task<HttpResponseMessage> ExecuteAsync(CancellationToken cancellationToken)
{
var response = new HttpResponseMessage()
{
Content = new StringContent(_value),
RequestMessage = _request
};
return Task.FromResult(response);
}
}

示例控制器操作:

public class ValuesController : ApiController
{
public IHttpActionResult Get()
{
return new TextResult("hello", Request);
}
}

响应:

HTTP/1.1  OK
Content-Length:
Content-Type: text/plain; charset=utf-
Server: Microsoft-IIS/8.0
Date: Mon, Jan :: GMT hello

更频繁地使用在 IHttpActionResult 命名空间中定义的 实现。 ApiController类定义返回这些内置操作结果的帮助器方法。

在以下示例中,如果请求与现有产品 ID 不匹配,则控制器将调用ApiController来创建404(未找到)响应。 否则,控制器将调用ApiController,这将创建一个包含该产品的200(OK)响应。

public IHttpActionResult Get (int id)
{
Product product = _repository.Get (id);
if (product == null)
{
return NotFound(); // Returns a NotFoundResult
}
return Ok(product); // Returns an OkNegotiatedContentResult
}

其他返回类型

对于所有其他返回类型,Web API 使用媒体格式化程序来序列化返回值。 Web API 将序列化的值写入响应正文。 响应状态代码为200(正常)。

public class ProductsController : ApiController
{
public IEnumerable<Product> Get()
{
return GetAllProductsFromDB();
}
}

这种方法的缺点是,您不能直接返回错误代码,如404。 但是,可以针对错误代码引发带有 httpresponseexception 。 有关详细信息,请参阅中的异常处理 ASP.NET Web API

Web API 使用请求中的 Accept 标头来选择格式化程序。 有关详细信息,请参阅内容协商

示例请求:

GET http://localhost/api/products HTTP/1.1
User-Agent: Fiddler
Host: localhost:
Accept: application/json

示例响应:

HTTP/1.1  OK
Content-Type: application/json; charset=utf-
Server: Microsoft-IIS/8.0
Date: Mon, Jan :: GMT
Content-Length: [{"Id":,"Name":"Yo-yo","Category":"Toys","Price":6.95}]

临时保存,这是msdn的文档原文!

Web API 2 的操作结果的更多相关文章

  1. Web API与文件操作

    前段时间,一直有练习ASP.NET MVC与Web API交互,接下来,Insus.NET再做一些相关的练习,Web API与文件操作,如POST文件至Web API,更新或是删除等. 不管怎样,先在 ...

  2. Asp.Net Web API 2(CRUD操作)第二课

    Asp.Net Web API 2(CRUD操作)第二课 Asp.Net Web API 导航   Asp.Net Web API第一课:入门http://www.cnblogs.com/aehyok ...

  3. ASP.NET Core Web API Cassandra CRUD 操作

    在本文中,我们将创建一个简单的 Web API 来实现对一个 “todo” 列表的 CRUD 操作,使用 Apache Cassandra 来存储数据,在这里不会创建 UI ,Web API 的测试将 ...

  4. 不使用jQuery对Web API接口POST,PUT,DELETE数据

    前些天,Insus.NET有演示Web API接口的操作: <怎样操作WebAPI接口(显示数据)>http://www.cnblogs.com/insus/p/5670401.html ...

  5. 2.3属性在 ASP.NET Web API 2 路由

    路由是 Web API 如何匹配 URI 的行动.Web API 2 支持一种新型的路由,称为属性路由.顾名思义,属性路由使用属性来定义路由.属性路由给你更多的控制 Uri 在您的 web API.例 ...

  6. ASP.NET Web API - ASP.NET MVC 4 系列

           Web API 项目是 Windows 通信接口(Windows Communication Foundation,WCF)团队及其用户激情下的产物,他们想与 HTTP 深度整合.WCF ...

  7. 返璞归真 asp.net mvc (10) - asp.net mvc 4.0 新特性之 Web API

    原文:返璞归真 asp.net mvc (10) - asp.net mvc 4.0 新特性之 Web API [索引页][源码下载] 返璞归真 asp.net mvc (10) - asp.net ...

  8. 通过HttpClient 调用ASP.NET Web API

    在前面两篇文章中我们介绍了ASP.NET Web API的基本知识和原理,并且通过简单的实例了解了它的基本(CRUD)操作.我们是通过JQuery和Ajax对Web API进行数据操作.这一篇我们来介 ...

  9. ASP.NET Web API编程——序列化与内容协商

    1 多媒体格式化器 多媒体类型又叫MIME类型,指示了数据的格式.在HTTP协议中多媒体类型描述了消息体的格式.一个多媒体类型包括两个字符串:类型和子类型. 例如: text/html.image/p ...

随机推荐

  1. 软工Alpha七天冲刺

    七天冲刺博客: 1.第一篇Scrum冲刺博客 2.第二篇Scrum冲刺博客 3.第三篇Scrum冲刺博客 4.第四篇Scrum冲刺博客 5.第五篇Scrum冲刺博客 6.第六篇Scrum冲刺博客 7. ...

  2. 使用ES对中文文章进行分词,并进行词频统计排序

    前言:首先有这样一个需求,需要统计一篇10000字的文章,需要统计里面哪些词出现的频率比较高,这里面比较重要的是如何对文章中的一段话进行分词,例如“北京是×××的首都”,“北京”,“×××”,“中华” ...

  3. [TCP/IP] 三次握手过程中有哪些不安全性

    1)SYN flood 泛洪攻击 , 伪装的IP向服务器发送一个SYN请求建立连接,然后服务器向该IP回复SYN和ACK,但是找不到该IP对应的主机,当超时时服务器收不到ACK会重复发送.当大量的攻击 ...

  4. 07.进程管理+作业控制+文件查找与压缩+文件压缩与打包+tar打包解包+NFS

    进程管理 程序放在磁盘上叫文件,把它复制到内存,并在cpu运行,就叫进程, 进程多少也反映当前运行程序的多少 进程在系统中会为每个进程生成一个进程号,在所有的进程中有一个特殊进程即init进程, 它是 ...

  5. 201871010135 张玉晶《面向对象程序设计(java)》第十一周学习总结

    项目 内容 <面向对象程序设计(java)> https://www.cnblogs.com/nwnu-daizh/ 这个作业的要求在哪里 https://www.cnblogs.com/ ...

  6. 网络服务—NFS

    什么是NFS ? NFS 是Network File System的缩写,即网络文件系统.一种使用于分散式文件系统的协定,由Sun公司开发,于1984年向外公布.功能是通过网络让不同的机器.不同的操作 ...

  7. 整合SpringTask实现定时任务

    一.框架介绍 SpringTask是Spring自主研发的轻量级定时任务工具,相比于Quartz更加简单方便,且不需要引入其他依赖即可使用. 二.Corn表达式 概述 Cron表达式是一个字符串,包括 ...

  8. mysql版本引起的驱动问题

    mysql版本引起的驱动问题 com.mysql.jdbc.Driver 是 mysql-connector-java 5中的, com.mysql.cj.jdbc.Driver 是 mysql-co ...

  9. django的几个常见命令、request请求取值形式、数据库连接、

    django基础知识薄弱点 几个常见的命令 #创建django项目 django-admin startproject mysite #启动django项目 python manage.py runs ...

  10. 万字长文把 VSCode 打造成 C++ 开发利器

    https://zhuanlan.zhihu.com/p/96819625 面对大量代码,在开发任务繁重场景下,VSCode 绝对是一把利器.本文虽以 C++为引,但在 python.php.java ...