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がエンティティオブジェクトの伝達の合理性をサポートしていない理由がわかります.一般的には、簡単なフィールドで情報を検索する(基本タイプに対応する)
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操作に相当する.
Postリクエストを使用する場合は、メソッドごとに1つのパラメータに対応するクラス(1つのパラメータのみであっても)を宣言し、パラメータの前に[FromBody]と表記し、パラメータが少ないと面倒ですが、Getリクエストを使用する場合はどちらでも構いませんが、キャッシュ(HttpClient,ajaxなどはキャッシュを無効にする必要があります)を防ぐ必要があります.
他の動作、例えばput deleteはpostリクエストとほぼ差がない.
ルート:
ルーティングにaction(routeTemplate:「api/{controller}/{action}/{id}」)が配置されている場合、MVCスタイルのルーティング.リクエストされたWebサイトはapi/person/GetName/idになります.
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になります.