9

これは私の DefaultApi 構成です:

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

[ActionName("DefaultAction")]
public HttpResponseMessage Get(string id)

[ActionName("DefaultAction")]
public HttpResponseMessage Post(MyClass obj)

どのようにGET機能しますが、使用POSTすると404 Not Foundエラーが発生しますか?

アイデアや提案はありますか?

編集:

クライアント JavaScript:

$.ajax({
    type: "POST",
    url: "@Url.Content("~/api/controllername")",
    data: args,
    200: function (data) {
          ......
        }
});
4

2 に答える 2

8

[FromBody]私は同様の問題を抱えていましたが、解決策は次のようにメソッドのパラメータに追加することでした:

[HttpPost]
public void PostIncreaseViewCounter([FromBody]int id)
{
}
于 2015-11-24T08:15:15.837 に答える
7

をルートに追加する{action}と、メソッド名のプレフィックスを使用して get/post 機能を決定する「魔法の」コードが機能しなくなります。

メソッドに[HttpPost]属性を追加する必要があります。Post(MyClass obj)

[HttpPost]
[ActionName("DefaultAction")]
public HttpResponseMessage Post(MyClass obj)
{
    // ...
}

// equivalent to:
[HttpPost]
public HttpResponseMessage DefaultAction(MyClass obj)
{
    // ...
}

上記で、メソッド名を使用してアクション名を定義できることに注意してください。そのため、ActionName属性を使用する代わりに、使用しているルートを指定してメソッドの名前を変更することができます。

于 2013-09-16T23:21:20.653 に答える