2

ASP.NET MVC4WebAPIを学習しています。2つのパラメータを受け取る新しいメソッドを作成したいと思います

[HttpPost] 
public string MarkAsSeen(int objectID, long userID)

jqueryを使用してそれを消費したいと思います:

$.ajax({
        type: "POST",
        url: "/api/tutorial/MarkAsSeen",
        data: JSON.stringify({ objectID: _obj, profileID: _pid }),
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        success: function (result) {
            alert(_tutorial + ' seen');
        },async: true
});

ルートをこのように構成しました

config.Routes.MapHttpRoute(
                name: "DefaultApi",
                routeTemplate: "api/{controller}/{action}"
            );

しかし、それは機能しません:

リクエストURI'http://local.dev.unation.com/api/tutorial/MarkAsSeen'に一致するHTTPリソースが見つかりませんでした。"、" MessageDetail ":"コントローラー'Tutorial'に一致するアクションが見つかりませんでした。リクエスト。

ルートのテンプレートをapi/{controller} / {action} / {objectID} / {profileID}に変更し、jqueryメソッドを使用してこの情報をURLに追加した場合:/ api / tutorial / MarkAsSeen / + _obj + / + _pid it動作します。

次の理由により、これらの変更を実行したくありません。

  • すべてのアクションへの1つの一般的なルートが必要です(したがって、パラメーター名/数量は重要ではありません)
  • このURLの追加は見苦しいです。データ属性を使用したいと思います。

私が間違っていることを教えてもらえますか?

tks!

4

1 に答える 1

3

Web.Api は複数のパラメーターをあまり好みません。最も簡単な解決策は、データを保持する新しい型を作成することです。

public class MarkAsSeenRequest
{
    public int objectID { get; set; }

    public int profileID { get; set; }
}

そして、それをコントローラー アクションで使用します。

[HttpPost] 
public string MarkAsSeen(MarkAsSeenRequest request)
{
    //...
}

元のルートで問題なく動作するはずです。

config.Routes.MapHttpRoute(
            name: "DefaultApi",
            routeTemplate: "api/{controller}/{action}"
        );

さらに読むには:

于 2013-01-04T14:38:40.253 に答える