最近在做一个工具,里面有一个发起http请求的操作,虽然工具不是用.NET写的,但是测试用服务器软件是.NET写的。在这里选择了ASP.NET MVC和Web API 2。

首先预定义Student与Human类,ASP.NET MVC定义了一个限定HttpPost的方法,要求传递一个Student对象。ASP.NET Web API 2 定义了一个限定HttpPost的方法,要求也是传递一个Student对象。

public class Human
{
public string Name { get; set; }
public Int32 Age { get; set; }
} public class Student : Human
{
public String[] School { get; set; }
}
[System.Web.Mvc.HttpPost]
public dynamic Req(Student student)
{
if (student != null)
{
return student;
}
return new Student { Name = "Joe", Age = 23, School = new string[] { "Oracle" } };
} [HttpPost]
public Student Req(Student student)
{
if (student != null)
{
return student;
}
return new Student { Name = "Joe", Age = 23, School = new string[] { "Oracle" } };
}

在工具里向这两个地址发起Post请求,头部设置Content-Type为application/json,正文为Student对象的JSON序列化。

然后在跟踪的时候发现,Web API 2的Student对象一直为Null,也就是Web API 2没有拿到请求正文的对象。然而MVC是拿到了的。这个时候陷入了江局,MVC能拿到代表正文内容是发出去了的,序列化内容也是没有问题的,但是Web API 2拿不到就说明请求还存在问题。

在StackOverflow和一些乱七八糟的网站上看了半天,似乎总是在围绕[FromBody],事实上不论加不加我这都是Null。一直检索似乎也不是个事,索性直接对比ASP.NET MVC与ASP.NET Web API 2的请求信息,结果发现一个问题:

发送给Web API 2的请求的Content-Length是0,但是MVC的则是实际长度。联想到在请求发起时的确没有设定Content-Length,估计是MVC自动标准化了请求的信息,而Web API 2严格遵循http标准,当Content-Length为0时便不再处理正文内容。

所以如果需要写代码对Web API 2发起请求,请不要忘记设置Content-Length,否则会忽略掉正文内容。

Web API 2 对于 Content-Length 要求严格的更多相关文章

  1. HttpClient读取ASP.NET Web API错误信息的简单方法

    在C#中,用HttpClient调用Web API并且通过Content.ReadAsStringAsync()读取响应内容时,如果出现500错误(InternalServerError),会得到一个 ...

  2. 【ASP.NET Web API教程】1.1 第一个ASP.NET Web API

    Your First ASP.NET Web API (C#)第一个ASP.NET Web API(C#) By Mike Wasson|January 21, 2012作者:Mike Wasson ...

  3. 使用 asp.net Web API 2的坑

    使用工具: Googl  浏览器+PostMan 插件 写了个  控制器 添加了个Action,结果呢?GET 方式请求没问题. POST一直,在服务器端获取不了参数...找了官方的文档 .各种雨里雾 ...

  4. 【ASP.NET Web API教程】6 格式化与模型绑定

    原文:[ASP.NET Web API教程]6 格式化与模型绑定 6 Formats and Model Binding 6 格式化与模型绑定 本文引自:http://www.asp.net/web- ...

  5. A simple Test Client built on top of ASP.NET Web API Help Page

    Step 1: Install the Test Client package Install the WebApiTestClient package from the NuGet Package ...

  6. Content Negotiation in ASP.NET Web API

    本文描述Web API实现内容协商(content negotiation). The HTTP specification (RFC 2616) defines content negotiatio ...

  7. Asp.Net Web API 2第十四课——Content Negotiation(内容协商)

    前言 阅读本文之前,您也可以到Asp.Net Web API 2 系列导航进行查看 http://www.cnblogs.com/aehyok/p/3446289.html 本文描述ASP.NET W ...

  8. 详解:基于WEB API实现批量文件由一个服务器同步快速传输到其它多个服务器功能

    文件同步传输工具比较多,传输的方式也比较多,比如:FTP.共享.HTTP等,我这里要讲的就是基于HTTP协议的WEB API实现批量文件由一个服务器同步快速传输到其它多个服务器这样的一个工具(简称:一 ...

  9. 用JWT来保护我们的ASP.NET Core Web API

    在上一篇博客中,自己动手写了一个Middleware来处理API的授权验证,现在就采用另外一种方式来处理这个授权验证的问题,毕竟现在也 有不少开源的东西可以用,今天用的是JWT. 什么是JWT呢?JW ...

  10. Web Api 与 Andriod 接口对接开发经验

    最近一直急着在负责弄Asp.Net Web Api 与 Andriod 接口开发的对接工作! 刚听说要用Asp.Net Web Api去跟 Andriod 那端做接口对接工作,自己也是第一次接触Web ...

随机推荐

  1. Vim编辑器入门

    vim(vimsual)是Linux/UNIX系列OS中通用的全屏编辑器. vim分为两种状态,即命令状态和编辑状态,在命令状态下,所键入的字符系统均作命令来处理,如:q代表退出,而编辑状态则是用来编 ...

  2. HTMLDocument的变化

    H5扩展了一些新的功能 1.readyState 属性的两个属性值 loading 正在加载文档 complete 已经加载完文档 可以根据对象的状态触动触发函数 2.兼容模式 IE6开始区分渲染页面 ...

  3. event based xml parser (SAX) demo

    import java.io.ByteArrayInputStream; import javax.xml.parsers.SAXParser; import javax.xml.parsers.SA ...

  4. Redis集群命令行部署工具

    使用之前准备工作: 1)配置好与端口无关的公共redis.conf文件,和工具放在同一目录下 2)配置好与端口相关的模板redis-PORT.conf文件,也和工具放在同一目录下(部署时PORT会被替 ...

  5. Kafka错误“Network is unreachable”和“larger than available brokers”

    确定Kafka安装和启动正确,ZooKeeper可以查到所有的Brokers,但执行: kafka-topics.sh --create --zookeeper localhost:2181 --re ...

  6. MFC源码实现文件对照表

    CDocManager类[实现文件] /SRC/DOCTEMPL.CPP CSingleDocTemplate类[实现文件] /SRC/DOCSINGL.CPP CWinApp::OnFileOpen ...

  7. linux搭建简易版本的FastDFS服务器

    开发环境:centos7环境 搭建FastDFS集群搭建非常复杂,对于初期学习FastDFS来说,搭建个单机版的作为入门更为实际一些. 首先感谢“在京奋斗者“”博主的详细搭建过程,附上博客地址http ...

  8. C#-VS异常处理

    VS异常处理 常规 try     可能会产生异常的代码,当一行产生异常,这行下面的代码不执行,转到catch开始执行 catch(system.Exception e)      e.message ...

  9. 第四章-shceme和数据类型优化

    选择数据类型的原则: 1.更小通常更好.因为占用更少磁盘,内存和cpu缓存.但是要确保没有低估,因为进行alter时,是很耗时和头疼的操作.所以当无法确定数据类型的时候,选择不会超过范围的最小类型. ...

  10. Codeforces791A Bear and Big Brother

    A. Bear and Big Brother time limit per test 1 second memory limit per test 256 megabytes input stand ...