asp.net webAPI

12742 ワード

Get:
1、Getパラメータ伝達の本質はurl文字列接合である.2、url文字列の長さが制限されている.3.Getパラメータ伝達は、Request-Body伝達をサポートしないHttp要求ヘッダ伝達である.4、Getタイプのメソッドサポートパラメータは基本タイプであり、エンティティタイプはサポートされていない.5、Getタイプの方法の命名は、できるだけ「Get+方法名」の命名方式を採用し、習慣的に方法の前に[HttpGet特性]を加えるべきである.6、実パラメータと形パラメータのマッチング、ルーティング規則に従う;7、GetがDBのSelect操作に対応していることから、Httpがエンティティオブジェクトの伝達の合理性をサポートしていない理由がわかります.一般的には、簡単なフィールドで情報を検索する(基本タイプに対応する)
        //api/Person
        public IEnumerable<string> Get()
        {
            return new string[] { "value1", "value2" };
        }

        //http://localhost:27653/api/person/25
        //[Route("GetID")]
        [Route("api/Person/{id}")]//          ,        webAPIConfig.cs     。
        public string Get(int id)
        {
            return "vichin" + id;
        }
        //api/Person?phoneNum=186

        //http://localhost:27653/api/person?phoneNum=25
        //       ,    URL               。
        public string GetPhoneNum(int phoneNum)
        {
            return phoneNum.ToString();
        }

        //api/Person?name=vichin
        public int Get(string name)
        {
            return name.Length;
        }

 
Post:
1、Postパラメータ伝達自体はRequest-Body内で伝達され、Getパラメータ伝達の本質はurl接合である.2.Postパラメータ伝達はkey/value形式ではなく、Getパラメータはkey/value形式である.3、Postがパラメータを渡す場合、単一のパラメータでもオブジェクトでも、[FromBody]特性を利用する(もちろん、[FromBody]特性を除いても値を渡すことができる場合もあるが、正規化のため、できるだけその特性を加える).4、Postは長さ制限がなく、Getは長さ制限がある(一般的に1024 b).5、PostはGetに対して、安全である;6、Post操作はDBのInsert操作に相当する.
        [HttpPost]
        public string Post([FromBody]string value, string value1)//[FromBody] string value
        {
            return "Post   ,value= " + value;
        }

        [HttpPost]
        public string PostDynamic([FromBody]Product product)//[FromBody] string value
        {
            return "PostDynamic   ,value= " + product.ProductName;
        }

        public string Put(int id, [FromBody] string value)//        FromBody   
        {
            return "Put   ,value=" + value + ",id=" + id;
        }
        public string Delete(int id)
        {
            return "Delte  , id:";
        }

Postリクエストを使用する場合は、メソッドごとに1つのパラメータに対応するクラス(1つのパラメータのみであっても)を宣言し、パラメータの前に[FromBody]と表記し、パラメータが少ないと面倒ですが、Getリクエストを使用する場合はどちらでも構いませんが、キャッシュ(HttpClient,ajaxなどはキャッシュを無効にする必要があります)を防ぐ必要があります.
            $("#btn").click(function () {
                $.ajax({
                    type: "Post",
                    url: "http://localhost:27653/api/person",
                    data: { "": "value" },//post  ,   key
                    success: function (res) {
                        alert(res);
                    },
                    error: function (msg) {
                        alert(msg.responseText);
                    }
                });
            });

            //GET     url      data , KEY:VALUE       。(   Chrome     ,       URL  )
            //    $.ajax({
            //        type: "Get",
            //        url: "/api/Default/ProductDetails",
            //        data: { "productDetail": JSON.stringify({ "ProductName": "YaGao", "ProductCode": "JX80869", "ProductPrice": 40.5 }) }
            //    })
            //})

            //dynamic      
            $("#btn1").click(function () {
                $.ajax({
                    type: "Post",
                    url: "http://localhost:27653/api/person",
                    data: { "ProductCode": "JX00036", "ProductName": "YaGao", "ProductPrice": 20.5 },
                    success: function (res) {
                        alert(res);
                    },
                    error: function (msg) {
                        alert(msg.responseText);
                    }
                });
            });

            var list_ProductDetail = [
                { "ProductCode": "JX00031", "ProductName": "ToothPaste", "ProductPrice": "20.5" },
                { "ProductCode": "JX00032", "ProductName": "ToothBrush ", "ProductPrice": "18.9" },
                { "ProductCode": "JX00033", "ProductName": "Pen", "ProductPrice": "199.9" },
                { "ProductCode": "JX00034", "ProductName": "computer", "ProductPrice": "15000.5" }
            ]

            $.ajax({
                type: "Post",
                contentType: 'application/json',
                url: "/api/Default/PostParamToProducts",
                data: JSON.stringify(list_ProductDetail)
            });

            var arr = ["a", "b", "c", "d"];
            data: JSON.stringify(arr)

 
他の動作、例えばput deleteはpostリクエストとほぼ差がない.
 
ルート:
    public static class WebApiConfig
    {
        public static void Register(HttpConfiguration config)
        {
            // Web API configuration and services

            // Web API routes
            config.MapHttpAttributeRoutes();//    

            config.Routes.MapHttpRoute(
                name: "DefaultApi",
                routeTemplate: "api/{controller}/{id}",
                defaults: new { id = RouteParameter.Optional }
            );
        }
    }

ルーティングにaction(routeTemplate:「api/{controller}/{action}/{id}」)が配置されている場合、MVCスタイルのルーティング.リクエストされたWebサイトはapi/person/GetName/idになります.