あなたはほとんどそこにいます。デフォルト ルート (WebApiConfig.cs
次のようになります。
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
非常に重要な注意事項が 1 つあります。ルートは宣言された順序で検査され、最初に一致したルートが使用されるため、デフォルト ルートは最後に移動する必要があります。
さまざまなチャート タイプの呼び出しを 1 つのアクションに送るか、それとも複数のアクションに送るかを決定する必要があります。
1 つのアクションの場合:
WebApiConfig.cs
config.Routes.MapHttpRoute(
name: "AzureQueue",
routeTemplate: "api/AzureQueue/{chartType}/{id}",
defaults: new { controller = "AzureQueue", id = RouteParameter.Optional }
);
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
AzureQueueController.cs
public class AzureQueueController : ApiController
{
public string Get(string chartType)
{
return "chart = " + chartType;
}
public string Get(string chartType, int id)
{
return "chart = " + chartType + ",id = " + id.ToString();
}
}
ここで注目すべき点が 2 つあります。デフォルトに割り当てられた匿名クラスでは、コントローラーの値によって、要求をルーティングするコントローラーが決定されます。これは、ルート テンプレートに含めることも、単にクラスで定義することもできます。また、タイプ Get のリクエストは、テンプレートに一致する Url 内の引数で始まり、Get
その引数を持つアクションに自動的に送信されます ( はオプションであるため、2 つの異なるケースid
があります)。
さまざまなチャートのビジネス ロジックが異なる場合を除き、これは私の好みの方法です。
一方、これを指定できます:
WebApiConfig.cs
config.Routes.MapHttpRoute(
name: "AzureQueue",
routeTemplate: "api/AzureQueue/{action}/{id}",
defaults: new { controller = "AzureQueue", id = RouteParameter.Optional }
);
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
ここでは isという単語action
をテンプレートとして使用しているため、これはアクション名として解釈されます。
AzureQueueController.cs
[HttpGet]
public string DeviceChart()
{
return "chart = DeviceChart" ;
}
[HttpGet]
public string DeviceChart(int id)
{
return "chart = DeviceChart" + ",id = " + id.ToString();
}
ここでは文字列引数はありません。URL のその部分は、使用するアクション (パブリック メソッド) を決定するために使用されています。また、アクション名が で始まらないため、メソッドごとGet
に属性を追加して、GET リクエストを受信できることを示す必要があります。[HttpGet]
あなたのプロジェクトで頑張ってください。