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) {
                
            }
        });

 

posted @   十二月雨  阅读(455)  评论(0编辑  收藏  举报
编辑推荐:
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?
· 使用C#创建一个MCP客户端
点击右上角即可分享
微信分享提示