最近在做一个工具,里面有一个发起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. PARSEC安环境配置、运行

    1.getting started 2.run PARSEC on simulators Full-System Simulators: such as Simics, GEM5.Trace-Driv ...

  2. mysql的myBatis,主键自增设置

    方法一: insert id="insert" parameterType="Person" useGeneratedKeys="true" ...

  3. thinkphp3.2.3 数据库增删改查

    版本3.23 1. 多表查找一条数据 M('a表')->join("b表 on b表.id=a表.id")->where('条件')->find(); 2.查找一 ...

  4. JDBC连接SQL Server数据库

    测试环境 数据库:SQL Server 2008 R2,创建数据库名:TestDemo,表:User,字段如下:   字段 字段 id UName UPass sqljdbc.jar下载地址:依赖的J ...

  5. AIX 补丁升级

    下载地址:http://www-933.ibm.com/support/fixcentral 1.root登陆系统: 2.对系统进行备份或者克隆(见上一篇抄袭IBM官方文档的文章): 3.官方建议为/ ...

  6. XCode中常用错误解决

    No such file or directory     解决方法(可以依次尝试,总有一种能最终解决问题):          方法1.退出Xcode,然后从finder里面进入~/Library/ ...

  7. java基础-day17

    第06天 集合 今日内容介绍 u  集合&迭代器 u  增强for & 泛型 u  常见数据结构 u  List子体系 第1章   集合&迭代器 1.1  集合体系结构 1.1 ...

  8. user_agent

    public function getipinfo($ip) { $res = '其他'; $url = "http://int.dpool.sina.com.cn/iplookup/ipl ...

  9. AngularJS 启动执行过程

    一.浏览器下载HTML/CSS/JavaScript等 当你转到一个页面地址后,浏览器先回下载这个HTML,同时,会开启一些辅助线程下载所关联的script标签和link标签里引用的文件. 二.浏览器 ...

  10. Brain Rules: 12 Principles for Surviving and Thriving at Work, Home, and School

    选自 https://litemind.com/brain-rules/