同じ署名を持つ複数のget/post呼び出しを持つWebAPIを構築しています。これで、複数の同一の呼び出しの場合、通常2つのオプションがあります。異なるコントローラーに分割するか、ルートで{action}を使用します。ほとんどのコントローラーを信じるのに最も適しているので、{action}メソッドを使用しました。ただし、私のコントローラーの1つでは、アクションメソッドを使用したくありません。
私はそのような電話をしています:
[HttpGet]
public Program Program(string venue, string eventId)
//api/{controller}/{venue}/{eventId}
今、私は新しい電話が必要です
[HttpGet]
public Program ProgramStartTime(string venue, string eventId)
//api/{controller}/{venue}/{eventId}
これにアクション名を追加して、ieを呼び出すことができることを知っています
api/{controller}/{action}/{venue}/{eventId}
しかし、私はそれが期待を破るような気がします。私が何かのようなことができる方法はありますか
api/Content/LAA/1/PST
api/Content/LAA/1?PST
また、アクションルートを使用する必要がある場合は、現在、他のコントローラーに使用するルートがすでにありますが、パラメーターとして{id}を使用するだけです。新しいルートはこれと競合しますか?ルートを設定するためのより良い方法はありますか?
config.Routes.MapHttpRoute(
name: "...",
routeTemplate: "api/{controller}/{action}/{id}",
defaults: new {id = RouteParameter.Optional}
);
config.Routes.MapHttpRoute(
name: "...",
routeTemplate: "api/{controller}/{action}/{venue}/{eventId}/{...}/{***}/{###}",
defaults: new {### = RouteParameter.Optional}
);
config.Routes.MapHttpRoute(
name: "...",
routeTemplate: "api/{controller}/{action}/{venue}/{eventId}/{...}",
defaults: new {... = RouteParameter.Optional}
);
config.Routes.MapHttpRoute(
name: "...",
routeTemplate: "api/{controller}/{action}/{venue}",
defaults: new {venue = RouteParameter.Optional}
);
最大5つのパラメーターを持つ少なくとも1つのメソッドを期待しています