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请求 对于取数据, ...
随机推荐
- Navi.Soft30.框架.Mobile.开发手册
1概述 1.1应用场景 互联网的发展,使用基于Web的软件异军突起,目前占据着相当大的市场份额,而手机,平板电脑等移动端设备的频繁使用,使移动端的软件快速发展,逐步有超越Web软件的趋势 移动软件中, ...
- 调用CXF工具 生成 WSDL【转】
在做WebService的时候,生成WSDL是必不可少的一步.我们通常使用的工具就是Axis和CXF. CXF提供了一个命令行工具,可以通过命令来生成Java to WSDL,也可以由WSDL生成Ja ...
- struts2:上传多个文件时实现带进度条、进度详细信息的示范
上一篇文章讲了上传单个文件与上传多个文件(属性驱动)的例子.本例是上传多个文件(属性驱动),并且显示进度条.进度详细信息的示范. 在文件上传选择界面,允许用户增加.删除选择的文件,且只能上传指定类型的 ...
- 关于typedef的使用方法
在计算机编程语言中用来为复杂的声明定义简单的别名.与宏定义有些差异.它本身是一种存储类的keyword,与auto.extern.mutable.static.register等keyword不能出如 ...
- 使用python pylab库 画线
pylab 提供了比较强大的画图功能,但是函数和参数都比较多,很容易搞混.我们平常使用最多的应该是画线了.下面,简单的对一些常用的划线函数进行了封装,方便使用. # -*- coding: utf-8 ...
- WeifenLuo组件中如何设置停靠窗体的宽度
在项目中使用了WeifenLuo.WinFormsUI.Docking组件,窗体停靠效果非常棒. 现在项目出现了这样的需求,希望可以控制停靠窗体的宽度,因为默认的宽度往往会造成停靠窗体的内容显示不完全 ...
- 尝试在tensorflow上运行facenet
上一篇装好了tensorflow的运行环境,开始尝试运行一些实例代码,在github上找到了一个tensorflow实现的facenet的代码,还是遇到了很多坑! 坚持看完,有重要总结! 代码:htt ...
- Android客户端与PHP服务端交互(一)---框架概述
背景 作为一个普通上班族,总是想做一些自认为有意义的事情,于是乎准备成立一个工作室,尽管目前正在筹备阶段,但是之前有些朋友提出一些需求的时候,我发现自己的能力还是有限,直到最近和一些技术牛朋友聊起这事 ...
- 构建基于WinRT的WP8.1 App 02:数据绑定新特性
基于WinRT的Windows Phone 8.1以及Windows 8.1中Xaml数据绑定增加了一些新特性. FallBackValue属性:FallBackValue在绑定的值属性值不存在时,可 ...
- Oracle数据库入门——高水位线详解
一.什么是水线(High Water Mark)? 所有的oracle段(segments,在此,为了理解方便,建议把segment作为表的一个同义词) 都有一个在段内容纳数据的上限,我们把这个上限称 ...