咱们总结一下用js请求服务器的传参方法。html
Get方式
Get主要是用来查询,通常分为无参,一个参数,多个参数,实体对象参数。前端
一、无参
-
-
var get_f1 = function() {
-
-
-
-
success: function(data, status) {
-
if (status == "success") {
-
$(
"#div_test").html(data);
-
-
-
-
二、一个参数
-
-
var get_f2 = function() {
-
-
-
-
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);
-
-
-
-
后台控制器方法
-
-
-
-
-
-
-
public string Get(string strQuery)
-
-
-
-
-
return "一个参数" + strQuery;
-
备注:在Get方式的时候咱们也能够把参数放在url,我这里为了前台写得统一些,全都放在data里面,感受好看一点。ajax
三、多个参数
-
-
var get_f3 = function() {
-
-
-
-
data: { Id: "1", Name: "Jim", CreateTime: "1988-09-11" },
-
success: function(data, status) {
-
if (status == "success") {
-
$(
"#div_test").html(data);
-
-
-
-
后台控制器方法
-
-
-
-
-
-
-
-
-
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"));
-
四、一个实体对象参数
-
-
var get_f4 = function() {
-
-
-
url: "/api/Demo/GetModel",
-
data: { Id: "1", Name: "Jim", CreateTime: "1988-09-11" },
-
success: function(data, status) {
-
if (status == "success") {
-
$(
"#div_test").html(data);
-
-
-
-
备注:到这里有没有发现多个参数和一个实体对象的请求方法是同样的,假如两个接收的方法都写在同一个控制器里面的话,路由是区分不出来要匹配那个方法处理,json
因此要用自定义路由来区分,在WebApi里面改方法名字是没有用的。api
后台控制器方法
-
-
-
-
-
-
-
-
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只能传递一个参数,若是须要多个参数的时候咱们须要把它们合并成一个扩展对象,当作对象来传递。app
在后台接收的时候咱们须要在参数列表里面写上[FromBody]由于Post方式的参数就不在Url里面了。post
一、一个参数
-
-
var post_f1 = function() {
-
-
-
-
-
-
success:
function(data, status) {
-
if (status == "success") {
-
$(
"#div_test").html(data);
-
-
-
-
注意:在写参数的时候咱们不能把参数写成 data:{"name":"Jim"} 这种方式,由于在后台是拿不到值的。ui
后台控制器方法
-
-
-
-
-
-
public string Post([FromBody]string name)
-
-
-
二、一个实体对象参数
-
-
var post_f2 = function () {
-
var postdata = { Id: "1", Name: "Jim", CreateTime: "1988-09-11" };
-
-
-
url: "/api/Demo/PostAdd",
-
-
-
success: function (data, status) {
-
if (status == "success") {
-
$(
"#div_test").html(data);
-
-
-
-
后台控制器方法
-
-
-
-
-
-
-
-
public object Post([FromBody]TbCharging oData)
-
-
var strName = String.Format("一个对象,{0},{1}", oData.Id, oData.Name);
-
-
备注:这里参数列表最好写上[FromBody],虽然不写也能拿到值。
三、一个数组参数
-
-
var post_f3 = function () {
-
var arr = ["1", "2", "3", "4"];
-
-
-
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'
后台的控制器方法
-
-
-
-
-
-
-
-
public object Post(string[] ids)
-
-
return String.Format("{0},{1},{2}", ids[0], ids[1], ids[2]);
-
四、实体集合参数
-
-
var post_f4 = function () {
-
-
{
Id: "1", Name: "Jim", CreateTime: "1988-09-11" },
-
{
Id: "2", Name: "Lilei", CreateTime: "1990-12-11" },
-
{
Id: "3", Name: "Lucy", CreateTime: "1986-01-10" }
-
-
-
-
url: "/api/Demo/PostMulti",
-
contentType:
'application/json',
-
data: JSON.stringify(arr),
-
success: function (data, status) {
-
if (status == "success") {
-
$(
"#div_test").html(data);
-
-
-
-
后台的控制器方法
-
-
-
-
-
-
-
-
public object Post([FromBody]List<TbCharging> lstCharging)
-
-
return String.Format("{0},{1}", lstCharging[0].Name, lstCharging[1].Name);
-
自定义路由
使用场景:用于方法重载,忽略方法名,自定义url
使用步骤:
一、在控制器类上方加入一个标记
-
[
RoutePrefix("api/Demo")]
-
public class DemoController : ApiController
-
二、在方法中加入路由标记
-
-
-
-
-
-
-
-
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"来访问了。