一、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. IDEA Exception in thread "main" java.lang.ClassNotFoundException: com.streamax.servicecore.business.FileManageServApplication

    [参考文章]:intelij idea: Exception in thread "main" java.lang.ClassNotFoundException 1. 报错信息 2 ...

  2. 机器学习基石笔记:05 Training versus Testing

    train:A根据给定训练集D在H中选出g,使得Ein(g)约等于0: test:g在整个输入空间X上的表现要约等于在训练集D上的表现,使得Eout(g)约等于Ein(g). 如果|H|小,更易保证t ...

  3. vue 自动化部署 jenkins 篇

    前端项目打包部署,以前都是手工运行打包命令,打包结束后压缩,然后上传到服务器上解压部署.这种重复性的工作,确实有点让人烦,而且效率也不高. 本文基于 vue 的前端项目. GitHub 的代码仓库,简 ...

  4. Xamarin.Android 无法检索到 Resource 问题

    错误提示:当前上下文中不存在名称"Resource" 解决方法: 1.看是否有其他错误,如果有其他错误优先解决.(其他错误导致无法感知到Resource) 2.重新生成解决方案.( ...

  5. Java连接Mysql数据库警告: Establishing SSL connection without server's identity verification is not recommended. According to MySQL 5.5.45+, 5.6.26+ and 5.7.6+ requirements SSL connection must be established

    详细错误: Establishing SSL connection without server's identity verification is not recommended. Accordi ...

  6. 1-监控界面sql保存

    1, BufferSize_machine 1), template 主要用来监控buffersize的状态的 name: 模块名字, 用于后续调取使用, label: 模块显示名字, 在页面显示的 ...

  7. 让BIND9对任意域名查询都返回固定的IP地址

    如何配置BIND9,使得向它发起的所有DNS请求都返回固定的IP地址?通过一些小技巧,可以实现. 下面是一个配置示例: 首先是主配置文件named.conf的配置: zone "." ...

  8. 实验吧 php

    Once More 题目地址:http://ctf5.shiyanbar.com/web/more.php 打开直接有源码: <?php if (isset ($_GET['password'] ...

  9. Debatching(Splitting) XML Message in Orchestration using DefaultPipeline - BizTalk 2010

    Debatching(Splitting) XML Message in Orchestration using DefaultPipeline - BizTalk 2010   In this po ...

  10. java操作远程共享目录

    一.前言 根据客户反馈,在进行文件下载的时候,新增远程共享目录,下载对应的文件到远程共享目录,采用常用的IO操作模式,提示下载成功,但是客户去远程共享目录查看对应的下载文件,反馈说没有找到对应的文件. ...