在网上看了小牛之路的webapi那篇文章,所以自己也想偿试一下
一,webapi简介
目前使用Web服务的三种主流的方式是:远程过程调用(RPC),面向服务架构(SOA)以及表征性状态转移(REST),其中REST模式的Web服务与复杂的SOA和RPC对比来讲显的更加简洁,越来越多的web服务开始采用REST风格设计和实现。
ASP.NET Web API(本文简称Web API),是基于ASP.NET平台构建RESTful应用程序的框架。可以说 Web API 就是为在.NET平台下构建RESTful应用程序而生的.
二,创建webapi程序
1,直接使用vs2013使用webapi模板创建程序
2,修改默认的WebApiConfig路由配置改为
config.Routes.MapHttpRoute( name: "DefaultApi", routeTemplate: "api/{controller}/{action}/{id}", defaults: new { id = RouteParameter.Optional } );
3,在直接生成的ValuesControllers文件里添加测试方法
public HttpResponseMessage test() { testmodel tm=new testmodel(); tm.aaa="cccc"; tm.bbb="dddd"; return Request.CreateResponse(HttpStatusCode.OK, new { data = new { user = tm, amount = 10 } }); } [HttpPost] public HttpResponseMessage text2([FromBody]testpara para) { return Request.CreateResponse(HttpStatusCode.OK, new { data = new { value1 = para.para1, value2 = para.para2 } }); } public class testpara { public string para1 { set; get; } public string para2 { set; get; } }
4,使用Form表单提交
<form id="form1" method="post" action="http://localhost:63665/api/Values/text2"> <input id="para1" name="para1" type="text"/> <input id="para2" name="para2" type="text"/> <input type="submit" value="提交"/> </form>
小结:上述方式测试OK,form提交有get和post方式,由方法头[HttpPost]决定,有两种传递方式,一种是get方式,必须以url提交,一种是post可以从url提交,也可以从form表单中提取,但是必须在参数前加上[FromBody]标记,后面的参数也很有意思,如果你用string或是一般的类型,读出来是空,必须自定义一个类型,例如例子里面的testpara,而且FromBody只能使用一次,如果不定义类型,多种复杂类型,可以使用JObject,也可以用ajax方式提交,提交的时候要注意指定contentType类型为"application/json"
改下方法
[HttpPost] public HttpResponseMessage text2([FromBody]JObject para) { var p = para.ToObject<testpara>(); return Request.CreateResponse(HttpStatusCode.OK, new { data = new { value1 = p.para1, value2 = p.para2 } }); }
如果是多个实体的复杂结构,我不知道有没有其它的办法,我能想到的是只有用ajax来传递封装好的json了
截几个来自酷小孩的一篇文章的图,链接ASP.NET MVC学习系列(二)-WebAPI请求