当社は製品用のAPIを開発中であり、ASP.NET MVCの使用を検討しています。 APIを設計する際、ユーザーがXML形式のAPIから情報を要求するには、次のような呼び出しを使用することにしました。
ご覧のとおり、複数のパラメーターが渡されます(つまり、artist
およびapi_key
)。 ASP.NET MVCでは、artist
はcontroller
、getImages
はアクションですが、複数のパラメーターをアクションに渡すにはどうすればよいですか?
上記の形式を使用しても可能ですか?
パラメーターは、アクションメソッドにパラメーターを追加するだけで、MVCで直接サポートされます。次のようなアクションが与えられた場合:
public ActionResult GetImages(string artistName, string apiKey)
次のようなURLを指定すると、MVCはパラメーターを自動入力します。
/Artist/GetImages/?artistName=cher&apiKey=XXX
もう1つの特別なケースは、「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
);
上記の最初の例のようなメソッド。
MVC 5以降では、属性ルーティングを使用して、URLパラメーター構成をコントローラーに移動することもできます。
詳細な議論はここにあります: http://blogs.msdn.com/b/webdev/archive/2013/10/17/attribute-routing-in-asp-net-mvc-5.aspx =
概要:
まず、属性ルーティングを有効にします
public class RouteConfig
{
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapMvcAttributeRoutes();
}
}
次に、属性を使用してパラメーターとオプションでデータ型を定義できます
public class BooksController : Controller
{
// eg: /books
// eg: /books/1430210079
[Route("books/{isbn?}")]
public ActionResult View(string isbn)
クエリ文字列を介して任意のパラメーターを渡すことができますが、RESTfulな方法でそれを処理するカスタムルートを設定することもできます。
http://ws.audioscrobbler.com/2.0/?method=artist.getimages&artist=cher&
api_key=b25b959554ed76058ac220b7b2e0a026
それは次のとおりです。
routes.MapRoute(
"ArtistsImages",
"{ws}/artists/{artist}/{action}/{*apikey}",
new { ws = "2.0", controller="artists" artist = "", action="", apikey="" }
);
したがって、誰かが次のルートを使用した場合:
ws.audioscrobbler.com/2.0/artists/cher/images/b25b959554ed76058ac220b7b2e0a026/
例のクエリ文字列と同じ場所にそれらを連れて行くでしょう。
上記は単なる例であり、ユーザーがURLを「ハッキング」しないように設定する必要のあるビジネスルールと制約は適用されません。