0

Asp.NET MVC 4 コントローラー (WebAPI ではない) を使用して、単一の URL が HTTP メソッド タイプに基づいて異なるアクション メソッドを指す必要がある真の RESTful API を実装しています。

したがって、mysite.com/Widget/1 などの URL は、次の 3 つのアクション メソッドのいずれかに移動できます。

[HttpPut]
public JSONResult Update(int widgetId) {}

[HttpDelete]
public JSONResult Delete(int widgetId) {}

[HttpGet]
public JSONResult Get(int widgetId) {}

1 つの URL をこれらの異なるアクション メソッドにルーティングする最善の方法は何ですか?

ActionNameフィルターに出くわしました。これは、各アクション メソッドに対して同じになるように設定できます。これにより、RouteConfig クラスは常に同じ ActionName を指し、MVC は HTTP メソッドの type 属性に基づいて適切なアクション メソッドを選択します。

[HttpPut]
[ActionName("CRUD")]
public JSONResult Update(int widgetId) {}

[HttpDelete]
[ActionName("CRUD")]
public JSONResult Delete(int widgetId) {}

[HttpGet]
[ActionName("CRUD")]
public JSONResult Get(int widgetId) {}

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

もっと良い方法はありますか?

4

1 に答える 1

1

したがって、mysite.com/Widget/1 などの URL は、次の 3 つのアクション メソッドのいずれかに移動できます。

次のような呼び出しmysite.com/Widget/1は、デフォルトで次のようになります

[HttpGet]
public JSONResult Get(int widgetId) {}

特に指定しない限り、ajax 呼び出しを行う場合は、TYPE属性を使用してこれを指定できます。例:TYPE:DELETE

1 つの URL をこれらの異なるアクション メソッドにルーティングする最善の方法は何ですか?

[HttpPut]\Delete\Get個人的には、[ActionName("CRUD")]属性を指定する必要はないと思います。あなたのユースケースでは、単にTYPE属性を使用するだけで、すべてのアクションに効果的に到達できます。

例:

に電話をかけるにpublic JSONResult Update(int widgetId) {}は、

$.ajax({
    url: mysite.com/Widget/1,
    type: "UPDATE",
    success: function (result) {},
    error: function () {}
});

に電話をかけるにpublic JSONResult Get(int widgetId) {}は、

$.ajax({
    url: mysite.com/Widget/1,
    type: "GET",
    success: function (result) {},
    error: function () {}
});

に電話をかけるにpublic JSONResult Delete(int widgetId) {}は、

$.ajax({
    url: mysite.com/Widget/1,
    type: "DELETE",
    success: function (result) {},
    error: function () {}
});

必読

于 2012-11-05T05:24:50.610 に答える