一、Action方法的返回类型

a) 操作方法的返回类型有四种:void、简单或复杂类型、HttpResponseMessage类型、IHttpActionResult类型。

b) 如果返回类型为void,请求结束后HTTP状态码为204(No Content),如果返回类型为复杂类型,则对象会被转化为Json字符串后传输。

c) 从图示的Web API的大致交互过程可以看到,Controll返回的是HttpResponseMessage类型,然后转换为HttpResponse提供给调用端。同时也可以自己手动设置在代码中返回一个HttpResponseMessage,并设置HTTP状态。

d) IHttpActionResult

WebAPI 2可以返回IHttpActionResult对象,与MVC的ActionResult类似。实现IHttpActionResult的类有:

返回这些类型是,就不用像HttpResponseMessage那样自己指定HTTP状态码了。

二、Web API Request\Response 数据格式

a) 媒体类型(又名MIME类型)指定数据的格式,例如type/subtype, text/html, text/xml, application/json, image/jpeg 等。在HTTP请求,请求中指定MIME类型的方法是是在头部中使用Accept和Content-Type属性。Accept头部属性指定客户期望的响应数据的格式,Content-Type头部属性指定请求体中的数据的格式,这样接收器可以解析它转换成适当的格式。

三、媒体格式器

a) 媒体格式器的作用便是根据使用Accept和Content-Type属性,来序列化请求或响应数据,以便使Web API可以理解这些数据格式。

WebAPI内置了一些媒体类型格式器:

使用GlobalConfiguration.Configuration.Formatters可以取得MediaTypeFormatterCollection,这里包含所有这些格式器的集合。还可以Add\Remove格式器。

b) JsonMediaTypeFormatter内部使用第三方开源库Json.NET来执行序列化。模式按照PascalCase编写Json属性名,如果想使用camelCase格式,可以在WebApiConfig中配置:

另外,给Formatter集合添加BsonMediaTypeFormatter可以支持BSON(二进制的JSON)的格式化。

四、媒体过滤器

a)与MVC中的过滤器类似,提供AOP的能力,可用于日志记录、异常处理、性能测量、身份认证和授权等。过滤器都实现System.Web.Http.Filters.IFilter接口,可用于创建过滤器的重要接口和类有:

b)假如要创建日志记录类,可以使用Action方法过滤器,有两种方式,实现IActionFilter或者继承ActionFilterAttribute类。

​如果采用实现IActionFilter的方式,因为是要创建类似LogAttribute这样的特性,还需要继承Attribute类。然后实现IActionFilter.ExecuteActionFilterAsync方法。Trace.Wrieline默写写入了输出窗口。

如果采用继承ActionFilterAttribute的方式,可以重写OnActionExecuting、OnActionExecuted方法并记录日志。

学习资料:www.yuanjiaocheng.net (猿教程) 作者:卿文刚

Web API 方法的返回类型、格式器、过滤器的更多相关文章

  1. Web API 入门 二 媒体类型

    还是拿上面 那篇 Web API 入门 一  的那个来讲 在product类中加一个时间属性

  2. ASP.NET Web API 2.0 统一响应格式

    传统实现 在搭建 Web API 服务的时候,针对客户端请求,我们一般都会自定义响应的 JSON 格式,比如: { "Data" : { "Id" : 100, ...

  3. ASP.NET Web API 中的返回数据格式以及依赖注入

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

  4. ASP.NET Web API 2 的返回结果

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

  5. Effective Java 第三版——47. 优先使用Collection而不是Stream来作为方法的返回类型

    Tips <Effective Java, Third Edition>一书英文版已经出版,这本书的第二版想必很多人都读过,号称Java四大名著之一,不过第二版2009年出版,到现在已经将 ...

  6. Web API中的返回值类型

    WebApi中的返回值类型大致可分为四种: Void/ IHttpActionResult/ HttpResponseMessage /自定义类型 一.Void void申明方法没有返回值,执行成功后 ...

  7. MVC教程五:Action方法的返回类型

    MVC中的Action方法的返回值一般有以下几种: 类型 s说明 EmptyResult 不进行任何操作 ContentResult 将指定内容作为文本输出 JsonResult 输出JSON字符串 ...

  8. 让ASP.NET Web API支持POST纯文本格式(text/plain)的数据

    今天在web api中遇到了这样一个问题,虽然api的参数类型是string,但只能接收post body中json格式的string,不能接收原始string. web api是这样定义的: pub ...

  9. ASP.NET - Web API,从简单类型到复杂类型的参数传递用例,以及传递简单string类型的解决办法

    一,简单类型的传值 比如 public Users Get(int id) ,它可以使用两种方式获取: api/default/ $.get("/api/default",{id: ...

随机推荐

  1. 【不遮遮掩掩】Github上传本地代码以及常见问题解决方案

    2019.20.18更新: 把完整命令打一遍吧,不然看完太累了不是 //初始化文件夹 git init //初始化目录,把基本文件下载下来,如ignore文件 git pull --rebase or ...

  2. 简单标签SimpleTag

    想要开发自定义标签,大多数情况下都要重写doStartTag(),doAfterBody()和doEndTag()方法,并且还要知道SKIP_BODY,EVAL_BODY等等的变量代表着什么,在什么方 ...

  3. [HAOI2017] 新型城市化

    给出的图中恰包含2个团,则图的补图为一个二分图,其最大独立集为原图的最大团. 我们知道,二分图的最大独立集=V-最小顶点覆盖,最小顶点覆盖=最大匹配. 问题转化为:计算删去后最大匹配减小的边集. 所以 ...

  4. Spring Boot 集成 Swagger2 与配置 OAuth2.0 授权

    Spring Boot 集成 Swagger2 很简单,由于接口采用了OAuth2.0 & JWT 协议做了安全验证,使用过程中也遇到了很多小的问题,多次尝试下述配置可以正常使用. Maven ...

  5. CentOS 6.5静态IP的设置(NAT和桥接联网方式都适用)

    不多说,直接上干货! 为了方便,用Xshell来.并将IP设置为静态的.因为,在CentOS里,若不对其IP进行静态设置的话,则每次开机,其IP都是动态变化的,这样会给后续工作带来麻烦.为此,我们需将 ...

  6. interface21 - web - Log4jConfigListener(Log4j加载流程)

    前言 最近打算花点时间好好看看spring的源码,然而现在Spring的源码经过迭代的版本太多了,比较庞大,看起来比较累,所以准备从最初的版本(interface21)开始入手,仅用于学习,理解其设计 ...

  7. java-Timer类使用方法

    Timer: public Timer()创建一个新计时器.相关的线程不 作为守护程序运行. 方法摘要: void schedule(TimerTask task, Date time)        ...

  8. VM虚拟机扩展硬盘容量

    VM虚拟机扩展硬盘容量 第一步,关闭系统,给虚拟机硬盘增加空间. 第二步,启动系统.查看硬盘大小和分区情况. 第三步,分区. 第四步,格式化分区. 第五步,挂载. 第六步,开机自动挂载. 第一步: 当 ...

  9. php 图像裁剪(自定义裁剪图片大小)

    <?php /** * 图像裁剪 * @param $title string 原图路径 * @param $content string 需要裁剪的宽 * @param $encode str ...

  10. JS判断是否是数组的四种做法

    一.前言 如何判断一个对象或一个值是否是一个数组,在面试或工作中我们常常会遇到这个问题,既然出现频率高,想着还是做个整理,那么本文主要基于几种判断方式,以及方式判断的原理,是否存在问题展开讨论. 二. ...