WebApi传参总动员(二)
上篇,从最简单的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传参总动员(二)的更多相关文章
- WebApi传参总动员(四)
前文介绍了Form Data 形式传参,本文介绍json传参. WebApi及Model: public class ValuesController : ApiController { [HttpP ...
- WebApi传参总动员(一)
目前自己的工作和WebApi相关,免不了传入.接收参数.以前的老办法是从请求流中获取json,再反序列化,这中间有2个不能控制的地方,一个是流,一个是反序列化,都需要try,总感觉非常的不爽.因此对W ...
- WebApi传参总动员(三)
上篇介绍了如何从输入流中获取实体对象.本篇介绍以url形式传递参数.简单的参数不再赘述,这里主要实现形如(string name,Woman woman)这样的参数传递. 本篇及后面几章均涉及js调用 ...
- WebApi传参总动员(五)
上回说到涉及多个实体的传参,用常规的方法已经不能解决了.这回我们用终极大招搞定她. WebApi:注意要引用JSON.Net [HttpPost] public string GetData(stri ...
- WebApi传参总动员(填坑)
本以为系列文章已经Over,突然记起来前面留了个大坑还没填,真是自己给自己挖坑. 这个坑就是: (body 只能被读取一次)Only one thing can read the body MVC和W ...
- C# WebApi传参之Post请求-AJAX
最近悟出来一个道理,在这儿分享给大家:学历代表你的过去,能力代表你的现在,学习代表你的将来. 十年河东十年河西,莫欺少年穷. 学无止境,精益求精 上一节讲述了C# WebApi传参之Get请求 ...
- C# WebApi传参之Get请求-AJAX
最近悟出来一个道理,在这儿分享给大家:学历代表你的过去,能力代表你的现在,学习代表你的将来. 十年河东十年河西,莫欺少年穷. 学无止境,精益求精 在介绍本篇博客之前,先来温故下AJax的请求, ...
- WebAPI传参
1.GET请求传递参数 URL传参:http://localhost/ApiTest/test?id=1 API接收参数 [HttpGet] public string GetUser(int id) ...
- C#进阶系列——WebApi 传参详解
本篇打算通过get.post.put.delete四种请求方式分别谈谈基础类型(包括int/string/datetime等).实体.数组等类型的参数如何传递. 回到顶部 一.get请求 对于取数据, ...
随机推荐
- 解决cxf+spring发布的webservice,types,portType和message以import方式导入
用cxf+spring发布了webservice,发现生成的wsdl的types,message和portType都以import的方式导入的.. 原因:命名空间问题 我想要生成的wsdl在同个文件中 ...
- 所有文章都迁移到我自己的博客了:http://blog.neazor.com
@import url(http://i.cnblogs.com/Load.ashx?type=style&file=SyntaxHighlighter.css);@import url(/c ...
- 优先队列求解Huffman编码 c++
优先队列小析 优先队列的模板: template <class T, class Container = vector<T>,class Compare = less< ...
- dll return a string
char g_szText[1024]; __declspec(dllexport) const char * __stdcall FuncName(const unsigned char *p) { ...
- Etl之HiveSql调优(union all)
相信在Etl的过程中不可避免的实用union all来拼装数据,那么这就涉及到是否并行处理的问题了. 在hive中是否适用并行map,可以通过参数来设定: set hive.exec.parallel ...
- java&postgresql时区总结
介绍这篇文章之前,首先回答一个问题,以前都没有时区的概念,程序也写的好好的,为什么要计算时区哪?举个例子,比如有一个订单的时间是:2015-07-04 11:28:19,那么咋一看没什么问题,可是如果 ...
- ivqBlog 开源博客 (angularjs + express + mongodb)
转向做全职前端差不多一年的时间了,其中学习了构建工具grunt,gulp,angularjs,coffeescript,less,sass,自己想要做全栈开发,所以自学了mongodb,nodejs, ...
- 如何将 Microsoft Bot Framework 链接至微信公共号
说到 Microsoft Bot Framework 其实微软发布了已经有一段时间了,有很多朋友可能还不太了解,微软Bot的功能今天我给大家简单的介绍一下,Bot Framework的开发基础以及如何 ...
- datagrid 动态列
var options={}; $(function(){ var myNj = 9; //初始化 $("#disgrid").datagrid({ type: 'POST', n ...
- win7下IE主页无法修改,IE设置无法保存解决方案
转自:http://www.myhack58.com/Article/48/65/2012/34411.htm 经测,有效! 现象如下: 1.开启后,首先总是指向http://go.microsoft ...