1. ホーム
  2. c#

[解決済み] ASP.NET MVCによる複数パラメータを用いたルーティング

2022-05-10 12:06:45

質問

弊社では、自社製品のAPIを開発しており、ASP.NET MVCの利用を考えています。 APIを設計する際に、ユーザーがAPIからXML形式で情報を要求するために、以下のような呼び出しを使用することにしました。

http://ws.audioscrobbler.com/2.0/?method=artist.getimages&artist=cher&api_key=b25b959554ed76058ac220b7b2e0a026

ご覧の通り、複数のパラメータが渡されます(例. artistapi_key ). ASP.NET MVCでは artistcontroller , getImages というアクションがありますが、複数のパラメータをどのようにアクションに渡せばいいのでしょうか?

上記のような書式でも可能なのでしょうか?

どのように解決するのですか?

MVCでは、アクションメソッドにパラメータを追加することで、パラメータを直接サポートすることができます。以下のようなアクションがあるとします。

public ActionResult GetImages(string artistName, string apiKey)

のようなURLが与えられると、MVCはパラメータを自動入力します。

/Artist/GetImages/?artistName=cher&apiKey=XXX

さらに特殊なケースとして、"id" という名前のパラメータがあります。IDという名前のパラメータは、クエリ文字列ではなくパスに入れることができるので、以下のような感じです。

public ActionResult GetImages(string id, string apiKey)

は、以下のようなURLで正しく入力されます。

/Artist/GetImages/cher?apiKey=XXX

さらに、より複雑なシナリオがある場合、MVCがアクションを見つけるために使用するルーティングルールをカスタマイズすることができます。global.asaxファイルには、カスタマイズ可能なルーティングルールが含まれています。デフォルトでは、ルールは次のようになります。

routes.MapRoute(
            "Default",                                              // Route name
            "{controller}/{action}/{id}",                           // URL with parameters
            new { controller = "Home", action = "Index", id = "" }  // Parameter defaults
        );

のようなurlに対応させたい場合

/Artist/GetImages/cher/api-key

のようなルートを追加することができます。

routes.MapRoute(
            "ArtistImages",                                              // Route name
            "{controller}/{action}/{artistName}/{apikey}",                           // URL with parameters
            new { controller = "Home", action = "Index", artistName = "", apikey = "" }  // Parameter defaults
        );

と、上の最初の例のようなメソッドがあります。