ASP.NET MVC4 WebAPIで非常に簡単なテストを行ったところ、いくつかの興味深い問題が見つかりました。
メソッドが複合型を使用している場合は機能しますが、stringまたはintを使用している場合は、次のスクリーンショットのように404をスローします。「AddProduct」は機能しますが、「Test」と「Test1」は常に見つかりません。
メソッドを正しく呼び出すにはどうすればよいですか?
ASP.NET MVC4 WebAPIで非常に簡単なテストを行ったところ、いくつかの興味深い問題が見つかりました。
メソッドが複合型を使用している場合は機能しますが、stringまたはintを使用している場合は、次のスクリーンショットのように404をスローします。「AddProduct」は機能しますが、「Test」と「Test1」は常に見つかりません。
メソッドを正しく呼び出すにはどうすればよいですか?
文字列またはintパラメータを[FromBody]属性で装飾する必要があります。
[HttpPost] public string Test([FromBody] string username)
[HttpPost] public int Test1([FromBody] int value)
これを試して:
ウェブサイトは「[FormBody]」で値を受け入れるので、「= {0}"で投稿する必要があります({0}は文字列データに置き換えられます)
$.ajax({
url: "api/values",
data: "='hello world'",
dataType: "text",
type: "POST",
success: function (data) {
$("#result").val(data);
},
fail: function (data) {
alert(data);
}
});
この回答も参照してください: ASP.NET4.5およびVS2012RCのWebAPIコントローラーに文字列をPOSTします
やってみました、
$.ajax({
url : "/api/product/test",
data : { username : "edi" },
dataType : "json",
type : "POST",
success : function(res){ console.log(res); },
error : function(req, stat, err){ console.log(stat + ": " + err); }
});
現在、jsonオブジェクト全体(jquery ajaxメソッド内)を引用符で囲んでいるため、失敗しています。
引用符なしで試して、私に知らせてください!
また、
string usernameやintvalueなどの単一の変数をテストする場合、WEBAPIはそれをまったく同じように期待することに注意してください。
この男、
[HttpPost]
public string Test1(int value) { ... }
このURL署名に一致する投稿を探します(HTTPIEを使用しています)...
$ http POST http://yourwebsite.com/api/test1 value = 1
ここで、「4」は、そのTest1メソッドの変数「value」の値です。
HTTPIEの詳細はこちら:HTTPIEのインストールに関するScott Hanselman
お役に立てば幸いです。
データをJSONにしたいので、これをほぼ1日検索しました。したがって、ここに1つの値を投稿する必要があるとすると、次のようになります。
INT:
$.post('/api/mywebmethod', { "": 10 })
ストリング
$.post('api/mywebmethod', { "": "10" });
コントローラ
[HttpPost]
public IHttpActionResult MyWebMethod([FromBody]int id)
{
//do work
}
を使用してRoute
[RoutePrefix("api/Product")]
public class ProductController:ApiController
{
[Route("Add"),HttpPost]
public string AddProduct(Product productModel)
[Route("Test"),HttpPost]
public string Test(string userName){}
}
呼び出し: localhost:xx // api / product / Add