7

ASP.NET MVC4 WebAPIで非常に簡単なテストを行ったところ、いくつかの興味深い問題が見つかりました。

メソッドが複合型を使用している場合は機能しますが、stringまたはintを使用している場合は、次のスクリーンショットのように404をスローします。「AddProduct」は機能しますが、「Test」と「Test1」は常に見つかりません。

メソッドを正しく呼び出すにはどうすればよいですか?

WebAPIコード

Testメソッドを呼び出すときの404

私のルート設定

4

5 に答える 5

18

文字列またはintパラメータを[FromBody]属性で装飾する必要があります。

[HttpPost] public string Test([FromBody] string username)

[HttpPost] public int Test1([FromBody] int value)

于 2014-03-26T19:13:25.060 に答える
4

これを試して:

ウェブサイトは「[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します

于 2012-11-29T14:45:47.680 に答える
2

やってみました、

$.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

お役に立てば幸いです。

于 2012-11-29T14:46:33.713 に答える
0

データをJSONにしたいので、これをほぼ1日検索しました。したがって、ここに1つの値を投稿する必要があるとすると、次のようになります。

INT:

$.post('/api/mywebmethod', { "": 10 })

ストリング

$.post('api/mywebmethod', { "": "10" });

コントローラ

[HttpPost]
public IHttpActionResult MyWebMethod([FromBody]int id)
{
//do work
}
于 2017-08-09T07:05:02.867 に答える
0

を使用して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

于 2017-08-09T07:14:22.900 に答える