上篇,从最简单的string入手。本篇演示了从请求的输入流中获取实体。api:

    public class ValuesController : ApiController
{ [HttpPost]
public string GetData(string name)
{
return "我爱" + name;
}
[HttpPost]
public string GetData()
{
var stream = HttpContext.Current.Request.InputStream;
byte[] byts = new byte[stream.Length];
stream.Read(byts, , (int)stream.Length);
//以UTF8形式获取数据
string json = Encoding.UTF8.GetString(byts);
Woman woman = JsonConvert.DeserializeObject<Woman>(json);
return woman.Age + "的" + woman.Name;
}
}
public class Woman//仅仅为了演示方便
{
public string Name{get;set;}
public string Age{get;set;}
}

js:

        var woman = { Name: '刘亦菲', Age: 18 };
$(function () {
$('#btn').click(function () {
$.ajax({
type: "post",
url: "http://localhost:7601/api/values/GetData",
data:JSON.stringify(woman),
success: function (r) {
alert(r);
}
});
});
});

结果:  

过程和结果都非常简单。但这里面蕴含着一个巨大的坑,你如果做Attribute验证的话。后面讲到的时候再谈。

如果Action的参数中含有一个简单类型和实体对象,形如

[HttpPost]
public string GetData(string name)
{
var stream = HttpContext.Current.Request.InputStream;
byte[] byts = new byte[stream.Length];
stream.Read(byts, , (int)stream.Length);
//以UTF8形式获取数据
string json = Encoding.UTF8.GetString(byts);
Woman woman = JsonConvert.DeserializeObject<Woman>(json);
return name + "喜欢" +woman.Age + "的" + woman.Name;
}
只需要在js中将url: "http://localhost:7601/api/values/GetData" 改为 url: "http://localhost:7601/api/values/GetData?name=楼主"即可。则在Action中name参数和实体均能正确获得。
由于比较简单,不再赘述。
值得一提的是,此方法对于复杂类型的实体对象传递,也能非常好的支持。比如Man类型的实体。
    public class Person
{
public string Name { get; set; }
public string Age { get; set; }
}
public class Man : Person
{
public Woman Wife { get; set; }
public List<Woman> Lovers { get; set; }
}
public class Woman : Person
{
public int Height { get; set; }
public List<DateTime> ExerciseTime { get; set; }
}

WebApi传参总动员(二)的更多相关文章

  1. WebApi传参总动员(四)

    前文介绍了Form Data 形式传参,本文介绍json传参. WebApi及Model: public class ValuesController : ApiController { [HttpP ...

  2. WebApi传参总动员(一)

    目前自己的工作和WebApi相关,免不了传入.接收参数.以前的老办法是从请求流中获取json,再反序列化,这中间有2个不能控制的地方,一个是流,一个是反序列化,都需要try,总感觉非常的不爽.因此对W ...

  3. WebApi传参总动员(三)

    上篇介绍了如何从输入流中获取实体对象.本篇介绍以url形式传递参数.简单的参数不再赘述,这里主要实现形如(string name,Woman woman)这样的参数传递. 本篇及后面几章均涉及js调用 ...

  4. WebApi传参总动员(五)

    上回说到涉及多个实体的传参,用常规的方法已经不能解决了.这回我们用终极大招搞定她. WebApi:注意要引用JSON.Net [HttpPost] public string GetData(stri ...

  5. WebApi传参总动员(填坑)

    本以为系列文章已经Over,突然记起来前面留了个大坑还没填,真是自己给自己挖坑. 这个坑就是: (body 只能被读取一次)Only one thing can read the body MVC和W ...

  6. C# WebApi传参之Post请求-AJAX

    最近悟出来一个道理,在这儿分享给大家:学历代表你的过去,能力代表你的现在,学习代表你的将来. 十年河东十年河西,莫欺少年穷.  学无止境,精益求精    上一节讲述了C# WebApi传参之Get请求 ...

  7. C# WebApi传参之Get请求-AJAX

    最近悟出来一个道理,在这儿分享给大家:学历代表你的过去,能力代表你的现在,学习代表你的将来. 十年河东十年河西,莫欺少年穷.  学无止境,精益求精    在介绍本篇博客之前,先来温故下AJax的请求, ...

  8. WebAPI传参

    1.GET请求传递参数 URL传参:http://localhost/ApiTest/test?id=1 API接收参数 [HttpGet] public string GetUser(int id) ...

  9. C#进阶系列——WebApi 传参详解

    本篇打算通过get.post.put.delete四种请求方式分别谈谈基础类型(包括int/string/datetime等).实体.数组等类型的参数如何传递. 回到顶部 一.get请求 对于取数据, ...

随机推荐

  1. Windows 2008 利用Filezilla server搭建FTP

    Windows 2008 利用Filezilla server搭建FTP, 安装后总是提示Error Connection To Server Lost , 后来,无意中先安装了IIS,再安装file ...

  2. 【转】微信公众账号 Senparc.Weixin.MP SDK 开发教程 索引

    微信公众账号 Senparc.Weixin.MP SDK 开发教程 索引 Senparc.Weixin.MP SDK从一开始就坚持开源的状态,这个过程中得到了许多朋友的认可和支持. 目前SDK已经达到 ...

  3. 出现Assertion failure in -[***** layoutSublayersOfLayer:]

    在自定义的view中使用了[self layoutIfNeeded]方法,在iOS8\9上都没有错误,但是在iOS7上出现了页面错乱,解决方案就是在自定义的view里面添加如下代码: + (void) ...

  4. 堆的基础题目学习(EPI)

    堆的应用范围也比较广泛,经常游走在各种面试题目之前,不论算法设计的题目还是海量数据处理的题目,经常能看到这种数据结构的身影.堆其实就是一个完全二叉树的结构,经常利用数组来实现.包含最大堆和最小堆两种. ...

  5. swift 附属脚本

    附属脚本是访问对象,集合或序列的快捷方式 struct STest{ let constValue:Int subscript(count:Int)->Int{ return count*con ...

  6. iOS 企业证书发布app 流程

    企业发布app的 过程比app store 发布的简单多了,没那么多的要求,哈 但是整个工程的要求还是一样,比如各种像素的icon啊 命名规范啊等等. 下面是具体的流程 1.修改你的 bundle i ...

  7. MySQL降权:MySQL以Guests帐户启动设置方法

    MySQL安装到Windows上,默认是以SYSTEM权限运行,如下图: SYSTEM是超级管理员.不是必须,不推荐用此权限运行任何程序. 本文将演示如何在GUEST帐户下运行MySQL. 第一步:建 ...

  8. 一个方法告诉你as3的removeChild性能有多烂

    其实as3这个坑我早就踩过,不过那时没太注意,最近把项目的removeChild干掉换成了visible=false,发现效率质的提升…… 先贴一下代码吧 private function testR ...

  9. 优化IIS7.5支持10万个同时请求windows 2008 R2

    通过对IIS7的配置进行优化,调整IIS7应用池的队列长度,请求数限制,TCPIP连接数等方面,从而使WEB服务器的性能得以提升,保证WEB访问的访问流畅. -

  10. Java版的Quartz表达式生成器,同时适用于Quartz.net(免费下载)

    Quartz是OpenSymphony开源组织在Job scheduling领域又一个开源项目,它可以与J2EE与J2SE应用程序相结合也可以单独使用.Quartz可以用来创建简单或为运行十个,百个, ...