パラメーターを取る(データセットではなくスカラー値を返す)GET RESTfulメソッドの通常の例は、次のようになります。
public string Get(int id)
{
//get and return the value
}
...渡されるvalは通常IDであるため、これを使用して、その一意の値に基づいてスカラー値を取得できます。
ただし、文字列やintなどの複数の値を渡したい場合はどうでしょうか。それは単にそのようにメソッドを定義することの問題ですか?
public string Get(string someString, int someInt)
{
//get and return the value
}
...そしてそれを次のように呼び出す:
//const string uri = "http://192.112.183.42:80/api/platypusItems/someString/someInt";, zB:
const string uri = "http://192.112.183.42:80/api/platypusItems/DuckbilledPlatypisAreGuysToo/42";
var webRequest = (HttpWebRequest) WebRequest.Create(uri);
?
IOW、ルーティングメカニズムは、2つの引数が渡されるので、2つの引数を指定してGet()メソッドを呼び出す必要があることを理解しますか( "構成上の規約")、または適切にルーティングするために実行する必要があることは他にありますか?
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();
}
}
デフォルトのマッピング構成があると仮定すると、http://192.112.183.42:80/api/platypusItems/42
はGetItemById
にマップされますが、http://192.112.183.42:80/api/platypusItems/42?name=DuckbilledPlatypisAreGuysToo
はGetItemByNameAndId
にマップされます。これは、Web APIがGetItemById
。
詳細については、Mike Wassonの記事 Attribute Routing 、 Routing and Action Selection および Routing in Web API を参照してください。