2

私は一日中グーグルで検索しましたが、まだ答えが見つかりません。toPOST経由でデータを取得する必要がありますが、できません。これは私のルーティングです:jQuery.postWeb API MVC-4

routes.MapRoute(
    name: "Default",
    url: "{controller}/{action}/{id}",
    defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);

そして、これは私のControllerGET作品です!):

    public string Get(int id)
    {
        return "value";
    }

    public void Post([FromBody]string data)
    {
        //body...
    }

これはjQuery.post:

$.post('api/mycontroller', { key1: 'val1' });

何か案が ?

編集:

@ダーリン:私はこれを試しました:

public class UnitDetails{
    public string id { get; set; }
}

と:

public void Post(UnitDetails id) {
    //body...
}

と:

$.post('api/mycontroller', {id:'string1'});

しかし、それでも何かが恋しい..それは止まらないPost(...){...}. 繰り返しGet(...){...}ますが、うまくいきます..?

4

2 に答える 2

6

これは仕様によるものであり、文字列などのプリミティブ型でこれを機能させる唯一の方法は次のとおりです。

$.post('/api/mycontroller', '=' + encodeURIComponent('val1'));

したがって、POST リクエストの本文には次のものが含まれている必要があります。

=val1

それ以外の:

data=val1

これについては、このスレッドで議論されています。

別の方法として、ビュー モデルを定義することもできます。

public class MyViewModel
{
    public string Data { get; set; }
}

次に、コントローラー アクションにこのビュー モデルをパラメーターとして使用させます。

public void Post(MyViewModel model)
{
    //body...
}

プリミティブ型とは対照的に、複合型はモデル バインドの代わりにフォーマッターを使用します。ここでan articleは、Web API がパラメーター バインドを行う方法について説明します。

于 2012-10-17T09:29:43.533 に答える
0

に投稿していapi/mycontrollerます。ASP.NET MVC は、'Controller' で指定された名前を自動的に追加するため、.NET という名前のコントローラーを探しmycontrollerControllerます。API コントローラーの名前は投稿に記載されていませんが、そうではないと思われます。

コントローラーの名前が「myController」であると仮定して、に投稿してみてくださいapi/my

$.post('api/my', { id: 'string1' });
于 2012-10-17T11:49:01.927 に答える