一、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. maven 下载镜像文件卡,下载pom文件慢的问题

    问题原因: maven默认的镜像库URL为 http://maven.net.cn/content/groups/public/ 由于网络原因,可能导致响应速度超级慢,或者无法效应: 解决方法: 配置 ...

  2. SQLServer 查看耗时较多的SQL语句(转)

    total_worker_time AS [总消耗CPU 时间(ms)],execution_count [运行次数], qs.total_worker_time AS [平均消耗CPU 时间(ms) ...

  3. 使用node.js + json-server + mock.js 搭建本地开发mock数据服务

    在开发过程中,前后端不论是否分离,接口多半是滞后于页面开发的.所以建立一个REST风格的API接口,给前端页面提供虚拟的数据,是非常有必要的.对比过多种mock工具后,我最终选择了使用 json se ...

  4. linux下tar.bz2文件的 解压缩方法

    一 使用bzip2解压缩命令进行解压缩: bzip2 -d  gcc-4.1.0.tar.bz2 二 上面解压完之后执行下面的命令. tar -xvf gcc-4.1.0.tar 或 tar -xvf ...

  5. Spring 源码分析之 bean 依赖注入原理(注入属性)

         最近在研究Spring bean 生命周期相关知识点以及源码,所以打算写一篇 Spring bean生命周期相关的文章,但是整理过程中发现涉及的点太多而且又很复杂,很难在一篇文章中把Spri ...

  6. app自动化测试中的相关api

    这个说的api即python自动化测试中经常会使用到的一些api,具体如下: 1.find_element_by_id/find_elements_by_id 定位元素api,使用方法如下: driv ...

  7. 启动elasticsearch报错

    could not find java; set JAVA_HOME or ensure java is in PATH 首先需要安装java 1.yum list installed |grep j ...

  8. Spark之submit任务时的Initial job has not accepted any resources; check your cluster UI to ensure that workers are registered and have sufficient memory

    Spark submit任务到Spark集群时,会出现如下异常: Exception 1:Initial job has not accepted any resources; check your ...

  9. PIVOT 行列相转

    先介绍一下英文释义: pivot 英 ['pɪvət]  美 ['pɪvət] n. 枢轴:中心点:旋转运动 vt. 以…为中心旋转:把…置于枢轴上 vi. 在枢轴上转动:随…转移 adj. 枢轴的: ...

  10. Nunit测试工具使用

    Nunit是什么 Nunit是一种TDD工具,和Junit一样的! 怎么样获取Nunit 打开Visual Studio工具,然后在菜单栏中的工具->扩展管理器中的联机库中搜索"nun ...