首页 > 代码库 > asp.net webapi 使用小结

asp.net webapi 使用小结

一星期前公司用webapi处理一些事情,自己总结一下用法。

1.创建一个空的webapi会默认有一下几个方法。

    public class ValueController : ApiController    {        // GET api/value        public IEnumerable<string> Get()        {            return new string[] { "value1", "value2" };        }        // GET api/value/5        public string Get(int id)        {            return "value";        }        // POST api/value        public void Post([FromBody]string value)        {        }        // PUT api/value/5        public void Put(int id, [FromBody]string value)        {        }        // DELETE api/value/5        public void Delete(int id)        {        }    }

第一个IEnumerable<string> Get()

      $.ajax({            url: "/api/value",            type: "get",            success: function (data) {                alert(data);            }        });

第二个 string Get(int id)

 

    $.ajax({            url: "/api/value/1",            type: "get",            success: function (data) {                alert(data);            }        });

 

第三个 void Post([FromBody]string value) ,调用的时候比较特殊,我在data前面的键值给空的时候才能把值传输到后台去。

 

    $.ajax({            url: "/api/value",            type: "post",            data: { ‘‘: "test" },            success: function (data) {                //alert(data);            }        });

 

或者改造后台接收方法。用实体来接收值,可以接收到。

        public class PostModel         {            public string value { get; set; }        }        public string Post([FromBody]PostModel value)        {            return "ok";        }
        $.ajax({            url: "/api/value",            type: "post",            data: { ‘value‘: "test" },            success: function (data) {                //alert(data);            }        });

第四个 string Put(int id, [FromBody]PostModel value) 调用的时候,id必须包含在路径中,才能获取到。放在接收的实体中也是没用的。

    $.ajax({            url: "/api/value/1",            type: "Put",            data: { ‘value‘: "test" },            success: function (data) {                //alert(data);            }        });

第五个 string Delete(int id) 调用跟第一个唯一的区别需要标明type:“Delete”

这是默认的几种使用方法,但是自己使用的时候感觉约束蛮多。然后我把它们全删了。

用法上不规范,但是用起来感觉比较舒服,感觉代码还是怎么写起来舒服怎么来吧,自己在api路由这里加了一项{action}这样用起来看着跟mvc区别不大。

    public static class WebApiConfig    {        public static void Register(HttpConfiguration config)        {            config.Routes.MapHttpRoute(                name: "DefaultApi",                routeTemplate: "api/{controller}/{action}/{id}",                defaults: new { id = RouteParameter.Optional }            );        }    }

 代码就可以这样写了。

    public class ValueController : ApiController    {        public List<string> GetList()        {            return new List<String> { "value1", "value2" };        }        public List<string> GetTestList()        {            return new List<String> { "value1", "value2" };        }    }       $.ajax({            url: "/api/value/GetTestList",            type:"post",            success: function (data) {                            }        });

对于webapi传参数,默认的都是从路径里提取的也就是get方式的传参。

     public List<string> GetList(string id,string name)        {            return new List<String> { "value1", "value2" };        }
    $.ajax({            url: "/api/value/GetList",            type: "get",
            data: { "id": "1", "name": "三" }, success: function (data) { } });
    $.ajax({            url: "/api/value/GetList?id=1&name=三",            type: "get",            success: function (data) {                            }        });
 

如果需要传的字符串参数很多,get方式会报错,可以用post方式,这里需要注意的是不能用get开头,要么它只认get提交

    public class PostModel    {        public string value { get; set; }        public string id{ get; set; }    }        public List<string> List([FromBody]PostModel value)        {            return new List<String> { "value1", "value2" };        }
    $.ajax({            url: "/api/value/List",            type: "post",            data: { "id": "1", "value": "01234567890123456789012345678901234567890123456789" },            success: function (data) {                            }        });