Web API 2 を使用する場合、属性ルーティングを使用して、次のようなリクエストをルーティングできます。http://192.112.183.42:80/api/platypusItems/DuckbilledPlatypisAreGuysToo/42
public class ItemsController : ApiController
{
[Route("api/{controller}/{id}")]
public string GetItemById(int id)
{
// Find item here ...
return item.ToString();
}
[Route("api/{controller}/{name}/{id}")]
public string GetItemByNameAndId(string name, int id)
{
// Find item here ...
return item.ToString();
}
}
http://192.112.183.42:80/api/platypusItems/DuckbilledPlatypisAreGuysToo/42
にマッピングされGetItemByNameAndId
ますhttp://192.112.183.42:80/api/platypusItems/42
が、 にマッピングされGetItemById
ます。
次のように、構成で属性ルーティングを有効にする必要があることに注意してください。
public static class WebApiConfig
{
public static void Register(HttpConfiguration config)
{
config.MapHttpAttributeRoutes();
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
}
}
ただし、通常は、引数を追加のパラメーターとして渡す必要があります。GET リクエストでは特に簡単です。これは Web API 1&2 で機能します。
public class ItemsController : ApiController
{
public string GetItemById(int id)
{
// Find item here ...
return item.ToString();
}
public string GetItemByNameAndId(string name, int id)
{
// Find item here ...
return item.ToString();
}
}
デフォルトのマッピング構成があると仮定すると、Web API は に 1 つではなく 2 つのパラメーターをマップできるため、http://192.112.183.42:80/api/platypusItems/42
は にマップされGetItemById
、http://192.112.183.42:80/api/platypusItems/42?name=DuckbilledPlatypisAreGuysToo
は にマップされます。GetItemByNameAndId
GetItemById
詳細については、属性ルーティング、ルーティングとアクションの選択、Web API でのルーティングに関する Mike Wasson の記事を参照してください。