Ajax 调用Web API大全

 

目录

首先配置一下WebApiConfig

调用无参数方法

Get

Get传递实体

GetUri传递实体

Get序列化后传递实体

Get请求失败405

Post请求单个参数

Post请求多个参数

Post传递实体

Post序列化后传递实体

Post使用Jobject接收多个参数

Put请求单个参数

Put传递实体

Put序列化后传递实体

Put使用Jobject接收多个参数

 HttpDelete与HttpPut是一样的就不写了


首先配置一下WebApiConfig

         config.Routes.MapHttpRoute(
             name: "DefaultApi2",
             routeTemplate: "api/{controller}/{action}/{id}",
             defaults: new { id = RouteParameter.Optional }
         );//新增api路由到指定action
         config.Routes.MapHttpRoute(
               name: "DefaultApi",
               routeTemplate: "api/{controller}/{id}",
               defaults: new { id = RouteParameter.Optional }
           );

添加一个新的站点地图,为什么要添加上面这个新的呢?

我们来看一下系统自动生成的地址:api/{controller}/{id}

简单来说如果要访问api的地址就需要在地址前加api然后是controller的名字最后是参数,没错没有方法名称,也就是说系统最开始生成的站点地址不需要寻找方法名称,只需要给参数就可以了,但是如果调用无参数的方法就会找不到路径,这个问题很尴尬,大家注意一下

调用无参数方法

   public class ValuesController : ApiController
    {
        [HttpGet]
        // GET api/values
        public IEnumerable<string> Get()
        {
            return new string[] { "value1", "value2" };
        }
    }
function GetNoParameters() {
        var par = {         
        };
        $.ajax({
            type: "get",
            url: "/api/Values/Get",
            data: par,
            dataType: "json",
            success: function (data) {
                console.log(data);
            },
            error: function (e) {
                console.log(e);
            }
        });
    }

Get

[HttpGet]
public string Get(int id)
{
    return "value";
}
function Get() {
        var par = {
                    "id":1
                    };
        $.ajax({
            type: "get",
            url: "/api/Values/Get",
            data: par,
            dataType: "json",
            success: function (data) {
                console.log(data);
            },
            error: function (e) {
                console.log(e);
            }
        });
    }

Get传递实体

[HttpGet]
public IEnumerable<Users> GetUserByModel(Users user)
{
    //不能接到user的值,能接收到Request的值
    int idParam = Convert.ToInt32(HttpContext.Current.Request.QueryString["UserID"]);
    string userNameParam = HttpContext.Current.Request.QueryString["UserName"];
    string emai = HttpContext.Current.Request.QueryString["UserEmail"];           
    List<Users> _userList = new List<Users>
    {
        new Users {UserID = idParam, UserName = userNameParam, UserEmail = emai},
        new Users {UserID = idParam, UserName = userNameParam, UserEmail = emai},
        new Users {UserID = idParam, UserName = userNameParam, UserEmail = emai}
    };
    return _userList;
}
function GetModel() {
        var user = { UserID: 11, UserName: "小张", UserEmail: "888888888@qq.com" };
        $.ajax({
            type: "get",
            url: "/api/Values/GetUserByModel",
            contentType: 'application/json',
            data: user,
            dataType: "json",
            success: function (data) {
                console.log(data);
            },
            error: function (e) {
                console.log(e);
            }
        });
    }

GetUri传递实体

        [HttpGet]
        public IEnumerable<Users> GetUserByModelUri([FromUri]Users user)
        {
            //能接到user的值,也能接收到Request的值
            int idParam = Convert.ToInt32(HttpContext.Current.Request.QueryString["UserID"]);
            string userNameParam = HttpContext.Current.Request.QueryString["UserName"];
            string emai = HttpContext.Current.Request.QueryString["UserEmail"];
            List<Users> _userList = new List<Users>
            {
                new Users {UserID = idParam, UserName = userNameParam, UserEmail = emai},
                new Users {UserID = idParam, UserName = userNameParam, UserEmail = emai},
                new Users {UserID = idParam, UserName = userNameParam, UserEmail = emai}
            };
            return _userList;
        }
function GetModelUri() {
        var user = { UserID: 11, UserName: "小张", UserEmail: "888888888@qq.com" };
        $.ajax({
            type: "get",
            url: "/api/Values/GetUserByModelUri",
            contentType: 'application/json',
            data: user,
            dataType: "json",
            success: function (data) {
                console.log(data);
            },
            error: function (e) {
                console.log(e);
            }
        });
    }

Get序列化后传递实体

        [HttpGet]
        public IEnumerable<Users> GetUserByModelSerialize(string userString)
        {
            Users user = JsonConvert.DeserializeObject<Users>(userString);
            List<Users> _userList = new List<Users>();
            _userList.Add(user);
            return _userList;
        }
function GetUserByModelSerialize() {
        var user = { UserID: 11, UserName: "小张", UserEmail: "888888888@qq.com" };
        $.ajax({
            type: "get",
            url: "/api/Values/GetUserByModelSerialize",
            contentType: 'application/json',
            data: {userString:JSON.stringify(user)},
            dataType: "json",
            success: function (data) {
                console.log(data);
            },
            error: function (e) {
                console.log(e);
            }
        });
    }

Get请求失败405

方法名以Get开头,WebApi会自动默认这个请求就是get请求,而如果你以其他名称开头而又不标注方法的请求方式,那么这个时候服务器虽然找到了这个方法,但是由于请求方式不确定,所以直接返回给你405——方法不被允许的错误

要养成良好习惯加上请求的方式([HttpGet]/[HttpPost]/[HttpPut]/[HttpDelete])

        public IEnumerable<Users> XXXXXGetUserByModelSerialize(string userString)
        {
            Users user = JsonConvert.DeserializeObject<Users>(userString);
            List<Users> _userList = new List<Users>();
            _userList.Add(user);
            return _userList;
        }
function XXXXXGetUserByModelSerialize() {
        var user = { UserID: 11, UserName: "小张", UserEmail: "888888888@qq.com" };
        $.ajax({
            type: "get",
            url: "/api/Values/XXXXXGetUserByModelSerialize",
            contentType: 'application/json',
            data: {userString:JSON.stringify(user)},
            dataType: "json",
            success: function (data) {
                console.log(data);
            },
            error: function (e) {
                console.log(e);
            }
        });
    }

Post请求单个参数

只接受一个参数的需要不给key才能拿到

        [HttpPost]
        public string Post([FromBody]string id)
        {
            return id;
        }
function Post() {
        var par = {
                    '':'1'
                    };
        $.ajax({
            type: "post",
            url: "/api/Values/Post",
            data: par,
            dataType: "json",
            success: function (data) {
                console.log(data);
            },
            error: function (e) {
                console.log(e);
            }
        });
    }

Post请求多个参数

别想了,老实用实体传吧。或者试试Jobject

Post传递实体

        [HttpPost]
        public IEnumerable<Users> PostUserModel([FromBody]Users user)
        {
            //能接到user的值,能接收到Request的值
            int idParam = Convert.ToInt32(HttpContext.Current.Request.Form["UserID"]);
            string userNameParam = HttpContext.Current.Request.Form["UserName"];
            string emai = HttpContext.Current.Request.Form["UserEmail"];
            //不能收到值
            var stringContent = base.ControllerContext.Request.Content.ReadAsStringAsync().Result;
            List<Users> _userList = new List<Users>
            {
                new Users {UserID = idParam, UserName = userNameParam, UserEmail = emai},
                new Users {UserID = idParam, UserName = userNameParam, UserEmail = emai},
                new Users {UserID = idParam, UserName = userNameParam, UserEmail = emai}
            };
            return _userList;
        }
function PostUserModel() {
        var user = { UserID: 11, UserName: "小张", UserEmail: "888888888@qq.com" };
        $.ajax({
            type: "post",
            url: "/api/Values/PostUserModel",
            data: user,
            dataType: "json",
            success: function (data) {
                console.log(data);
            },
            error: function (e) {
                console.log(e);
            }
        });
    }

Post序列化后传递实体

        [HttpPost]
        public IEnumerable<Users> PostUserModelSerialize([FromBody]Users user)
        {
            //能接到user的值,不能接收到Request的值
            int idParam = Convert.ToInt32(HttpContext.Current.Request.Form["UserID"]);
            string userNameParam = HttpContext.Current.Request.Form["UserName"];
            string emai = HttpContext.Current.Request.Form["UserEmail"];
            //不能收到值
            var stringContent = base.ControllerContext.Request.Content.ReadAsStringAsync().Result;
            List<Users> _userList = new List<Users>
            {
                new Users {UserID = idParam, UserName = userNameParam, UserEmail = emai},
                new Users {UserID = idParam, UserName = userNameParam, UserEmail = emai},
                new Users {UserID = idParam, UserName = userNameParam, UserEmail = emai}
            };
            return _userList;
        }

 不能写参数名称,必须写contentType

function PostUserModelSerialize() {
        var user = { UserID: 11, UserName: "小张", UserEmail: "888888888@qq.com" };
        $.ajax({
            type: "post",
            url: "/api/Values/PostUserModelSerialize",
            contentType: 'application/json',
            data: JSON.stringify(user),
            dataType: "json",
            success: function (data) {
                console.log(data);
            },
            error: function (e) {
                console.log(e);
            }
        });
    }

Post使用Jobject接收多个参数

        [HttpPost]
        public string PostModelObject([FromBody]JObject jData)
        {
            string idParam = HttpContext.Current.Request.Form["User[UserID]"];
            string nameParam = HttpContext.Current.Request.Form["User[UserName]"];
            string emailParam = HttpContext.Current.Request.Form["User[UserEmail]"];
            string infoParam = HttpContext.Current.Request.Form["info"];
            dynamic json = jData;
            JObject jUser = json.User;
            string info = json.Info;
            var user = jUser.ToObject<Users>();

            return string.Format("{0}_{1}_{2}_{3}", user.UserID, user.UserName, user.UserEmail, info);
        }
function PostModelObject() {
        var user = { UserID: 11, UserName: "小张", UserEmail: "888888888@qq.com" };
        var info = "this is muti model";
        $.ajax({
            type: "post",
            url: "/api/Values/PostModelObject",
            data: {User:user,Info:info},
            dataType: "json",
            success: function (data) {
                console.log(data);
            },
            error: function (e) {
                console.log(e);
            }
        });
    }

Put请求单个参数

只接受一个参数的需要不给key才能拿到

        [HttpPut]
        public string Put([FromBody]int id)
        {
            return "";
        }
function Put() {
        var par = {
            '': '1'
        };
        $.ajax({
            type: "put",
            url: "/api/Values/Put",
            data: par,
            dataType: "json",
            success: function (data) {
                console.log(data);
            },
            error: function (e) {
                console.log(e);
            }
        });
    }

Put传递实体

        [HttpPut]
        public Users PutUserModel([FromBody]Users user)
        {
            //能接到user的值,能接收到Request的值
            string idParam = HttpContext.Current.Request.Form["UserID"];
            string nameParam = HttpContext.Current.Request.Form["UserName"];
            string emailParam = HttpContext.Current.Request.Form["UserEmail"];

            //var userContent = base.ControllerContext.Request.Content.ReadAsFormDataAsync().Result;
            //不能收到值
            var stringContent = base.ControllerContext.Request.Content.ReadAsStringAsync().Result;
            return user;
        }
function PutUserModel() {        
        var user = { UserID: 11, UserName: "小张", UserEmail: "888888888@qq.com" };
        $.ajax({
            type: "put",
            url: "/api/Values/PutUserModel",
            data: user,
            dataType: "json",
            success: function (data) {
                console.log(data);
            },
            error: function (e) {
                console.log(e);
            }
        });
    }

Put序列化后传递实体

        [HttpPut]
        public Users PutUserModel([FromBody]Users user)
        {
            //能接到user的值,不能接收到Request的值
            string idParam = HttpContext.Current.Request.Form["UserID"];
            string nameParam = HttpContext.Current.Request.Form["UserName"];
            string emailParam = HttpContext.Current.Request.Form["UserEmail"];

            //var userContent = base.ControllerContext.Request.Content.ReadAsFormDataAsync().Result;
            //不能收到值
            var stringContent = base.ControllerContext.Request.Content.ReadAsStringAsync().Result;
            return user;
        }

 不能写参数名称,必须写contentType

function PutUserModelSerialize() {        
        var user = { UserID: 11, UserName: "小张", UserEmail: "888888888@qq.com" };
        $.ajax({
            type: "put",
            url: "/api/Values/PutUserModel",
            contentType: 'application/json',
            data: JSON.stringify(user),
            dataType: "json",
            success: function (data) {
                console.log(data);
            },
            error: function (e) {
                console.log(e);
            }
        });
    }

 

Put使用Jobject接收多个参数

        [HttpPut]
        public string PutModelObject([FromBody]JObject jData)
        {
            string idParam = HttpContext.Current.Request.Form["User[UserID]"];
            string nameParam = HttpContext.Current.Request.Form["User[UserName]"];
            string emailParam = HttpContext.Current.Request.Form["User[UserEmail]"];
            string infoParam = HttpContext.Current.Request.Form["info"];
            dynamic json = jData;
            JObject jUser = json.User;
            string info = json.Info;
            var user = jUser.ToObject<Users>();

            return string.Format("{0}_{1}_{2}_{3}", user.UserID, user.UserName, user.UserEmail, info);
        }
function PutModelObject() {
        var user = { UserID: 11, UserName: "小张", UserEmail: "888888888@qq.com" };
        var info = "this is muti model";
        $.ajax({
            type: "put",
            url: "/api/Values/PutModelObject",
            data: {User:user,Info:info},
            dataType: "json",
            success: function (data) {
                console.log(data);
            },
            error: function (e) {
                console.log(e);
            }
        });
    }

 HttpDelete与HttpPut是一样的就不写了

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值