Get方式
Get主要是用来查询,一般分为无参,一个参数,多个参数,实体对象参数。
原文地址:
http://blog.csdn.net/qq373591361/article/details/51508806
1、无参
var get_f1 = function () { $.ajax({ type: "get" , url: "/api/Demo" , success: function (data, status) { if (status == "success" ) { $("#div_test" ).html(data); } } }); }
2、一个参数
var get_f2 = function () { $.ajax({ type: "get" , url: "/api/Demo" , data: { strQuery: JSON.stringify({ Id: "1" , Name: "Jim" , CreateTime: "1988-09-11" }) }, contentType: "application/json" , success: function (data, status) { if (status == "success" ) { $("#div_test" ).html(data); } } }); }
后台控制器方法
[HttpGet] public string Get( string strQuery) { return "一个参数" + strQuery; }
备注:在Get方式的时候我们也可以把参数放在url,我这里为了前台写得统一些,全都放在data里面,感觉好看一点。
3、多个参数
var get_f3 = function () { $.ajax({ type: "get" , url: "/api/Demo" , data: { Id: "1" , Name: "Jim" , CreateTime: "1988-09-11" }, success: function (data, status) { if (status == "success" ) { $("#div_test" ).html(data); } } }); }
后台控制器方法
[HttpGet] public string Get( int Id, string Name, DateTime CreateTime) { return String.Format( "多个参数,{0},{1},{2}" , Id, Name, CreateTime.ToString( "yyyy-MM-dd hh:mm:ss" )); }
4、一个实体对象参数
var get_f4 = function () { $.ajax({ type: "get" , url: "/api/Demo/GetModel" , data: { Id: "1" , Name: "Jim" , CreateTime: "1988-09-11" }, success: function (data, status) { if (status == "success" ) { $("#div_test" ).html(data); } } }); }
备注:到这里有没有发现多个参数和一个实体对象的请求方法是一样的,假如两个接收的方法都写在同一个控制器里面的话,路由是区分不出来要匹配那个方法处理,
所以要用自定义路由来区分,在WebApi里面改方法名字是没有用的。
后台控制器方法
[HttpGet] [Route("GetModel" )] public string Get([FromUri]TbCharging oData) { return String.Format( "一个实体对象参数,{0},{1},{2},{3}" , oData.Id, oData.Name, oData.Des, oData.CreateTime.ToString( "yyyy-MM-dd hh:mm:ss" )); }
备注:在使用Get传递实体对象参数的时候要注意,因为Get方式的时候参数是写在url的,所以我们在后台用[FromBody ]是拿不到实体参数的,需要写[FromUri ]才行。
Post方式
Post方式我们一般用来做增、删、改操作。在WebApi中Post仅仅用来做增加操作,修改用Put,删除用Delete。这些在新建模板的时候就自动为我们生成了。
还有要提一下的是Post只能传递一个参数,如果需要多个参数的时候我们需要把它们合并成一个扩展对象,当做对象来传递。
在后台接收的时候我们需要在参数列表里面写上[FromBody ]因为Post方式的参数就不在Url里面了。
1、一个参数
var post_f1 = function () { $.ajax({ type: "post" , url: "/api/Demo" , data: { "" : "Jim" }, success: function (data, status) { if (status == "success" ) { $("#div_test" ).html(data); } } }); }
注意:在写参数的时候我们不能把参数写成 data:{"name":"Jim"} 这种方式,因为在后台是拿不到值的。
后台控制器方法
public string Post([FromBody] string name) { return "一个参数," + name; }
2、一个实体对象参数
var post_f2 = function () { var postdata = { Id: "1" , Name: "Jim" , CreateTime: "1988-09-11" }; $.ajax({ type: "post" , url: "/api/Demo/PostAdd" , data: postdata, success: function (data, status) { if (status == "success" ) { $("#div_test" ).html(data); } } }); }
后台控制器方法
[HttpPost] [Route("PostAdd" )] public object Post([FromBody]TbCharging oData) { var strName = String.Format("一个对象,{0},{1}" , oData.Id, oData.Name); return strName; }
备注:这里参数列表最好写上[FromBody ],虽然不写也能拿到值。
3、一个数组参数
var post_f3 = function () { var arr = [ "1" , "2" , "3" , "4" ]; $.ajax({ type: "post" , url: "/api/Demo/PostArray" , contentType: 'application/json' , data: JSON.stringify(arr), success: function (data, status) { if (status == "success" ) { $("#div_test" ).html(data); } } }); }
这里我们说一下
contentType
和
dataType
。
contentType
发送信息至服务器时内容编码类型。假如你不写的话,默认值是: "application/x-www-form-urlencoded "。
dataType
预期服务器返回的数据类型。
如果我们Post提交的是json参数,最好就写上 contentType: 'application/json'
后台的控制器方法
[HttpPost] [Route("PostArray" )] public object Post( string [] ids) { return String.Format( "{0},{1},{2}" , ids[0], ids[1], ids[2]); }
4、实体集合参数
var post_f4 = function () { var arr = [ { Id: "1" , Name: "Jim" , CreateTime: "1988-09-11" }, { Id: "2" , Name: "Lilei" , CreateTime: "1990-12-11" }, { Id: "3" , Name: "Lucy" , CreateTime: "1986-01-10" } ]; $.ajax({ type: "post" , url: "/api/Demo/PostMulti" , contentType: 'application/json' , data: JSON.stringify(arr), success: function (data, status) { if (status == "success" ) { $("#div_test" ).html(data); } } }); }
后台的控制器方法
[HttpPost] [Route("PostMulti" )] public object Post([FromBody]List<TbCharging> lstCharging) { return String.Format( "{0},{1}" , lstCharging[0].Name, lstCharging[1].Name); }
自定义路由
使用场景:用于方法重载,忽略方法名,自定义url
使用步骤:
1、在控制器类上方加入一个标记
[RoutePrefix( "api/Demo" )] public class DemoController : ApiController {}
2、在方法中加入路由标记
[HttpPost] [Route("PostArray" )] public object Post([FromBody] string [] ids) { return String.Format( "{0},{1},{2}" , ids[0], ids[1], ids[2]); }
备注:上面的api/Demo 和PostArray 可以自己定义名字。像我这样写就可以直接用 url:"/api/Demo/PostArray" 来访问了。