一、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 (猿教程) 作者:卿文刚

最新文章

  1. (2016弱校联盟十一专场10.3) D Parentheses
  2. angular源码分析:angular的源代码目录结构说明
  3. poj 2325 Persistent Numbers
  4. IQ测试
  5. Jquery EasyUI的添加,修改,删除,查询等基本操作介绍
  6. quick-cocos2d-x学习笔记—定时器
  7. (centos)linux下访问双系统windows7文件系统
  8. Flink - DataStream
  9. c++之路进阶——codevs4543(普通平衡树)
  10. Codeforces 716C[数论][构造]
  11. 确认某端口占用情况并结束相应进程(Windows)
  12. Oracle 监听动态注册与静态注册
  13. 正则过滤html标签
  14. ios模拟器安装.app
  15. IIS Express允许外部访问(外部调试)
  16. Yii小部件
  17. 【C++ Primer 第13章】3. 交换操作
  18. 关于Android中传递数据的一些讨论
  19. Redis如何存储对象与集合示例详解
  20. opencv图片转幻灯片视频

热门文章

  1. Ubuntu 16.04 python和OpenCV安装
  2. linux下应用程序性能剖分神器gprofiler-tools-安装和使用
  3. web自动化测试---测试环境的部署
  4. Python内置类型(3)——比较
  5. odoo开发笔记 -- 多对多字段追加数据
  6. SVN服务器搭建实录
  7. redis-cluster无备节点,安装脚本
  8. 通过GitHub和GoDaddy搭建静态个人博客
  9. Spring Boot + Spring Cloud 实现权限管理系统 后端篇(十七):登录验证码实现(Captcha)
  10. 详解 Java NIO