0

私はMVCを初めて使用します。混乱はこの質問のタイトルを少し超えていると思いますが、初心者にとっては次のようになります。

public class TestController : ApiController
{
    [HttpPost]
    public bool ReceiveHunk(Alterity.Models.Async.HunkDTO hunk)
    {
        return true;
    }

    [HttpPost]
    public bool A(int x) { return false; }
    [HttpPost]
    public bool B(int x) { return true; }
}

URLはコントローラーにのみルーティングされているようで(これは正しい用語ですか?)、パラメーターに基づいてメソッドが選択されているため、AまたはBの選択を呼び出すことはできません。2つのメソッドに(int x)があるので、どちらを呼び出すべきかわかりません。私の混乱は、私がそうするとき、次の事実によって悪化します:

$.ajax({
    cache: false,
    type: "POST",
    url: ApiLocation + 'Test',
    contentType: 'application/json',
    dataType: "json",
    data: JSON.stringify(5),
    success: function (response) { }
});

それでもReceiveHunkメソッドに移動し、ハンクはnullになります。Bをコメントアウトしても、ReceiveHunkは引き続き呼び出されます。これは、フォームURLエンコードの代わりにJSONを使用しているという事実に関連していますか?同じシグニチャを持つメソッドごとに個別のApiControllerを用意する必要がありますか?URLにメソッド名が含まれるようにルーティング(またはwhatsit)を構成する方法はありますか?通常のコントローラーはURLにメソッド名を含めますが、なぜApiControllerを使用しないのですか?さらに、AまたはBのいずれかを変更してパラメーターをゼロにすると、メソッドが呼び出されず、例外も発生せずに、内部サーバーエラー(500)が発生します。これを解決するのに役立つ情報をいただければ幸いです。

4

1 に答える 1

2

これは、ASP.NET Web API の既定のルーティング規則にすぎません。ASP.NET Web API ルーティングを構成する方法 (およびルートにアクション名を含める方法) の詳細については、次の質問/回答をお読みください。

于 2012-08-27T07:14:47.843 に答える