私は 2 つのメソッドを持つ Web API コントローラーを持っています。最初のメソッドが単純なプロジェクト リストを返し、2 番目のメソッドが特定のユーザーに割り当てられたすべてのプロジェクトを返すとしましょう。
public class ProjectController: ApiController
{
public IQueryable<Project> Get() { ... }
[HttpGet]
public IQueryable<Project> ForUser(int userId) { ... }
}
この場合、メソッドの実装は重要ではありません。
Web API のルート構成も、カスタム メソッド名をサポートするように調整されています。
config.Routes.MapHttpRoute(
"DefaultApi",
"api/v1/{controller}/{id}",
new { id = RouteParameter.Optional }
);
config.Routes.MapHttpRoute(
"DefaultApiWithAction",
"api/v1/{controller}/{action}");
/api/v1/projects/
正常に動作し、とエンドポイントの両方にアクセスできます/api/v1/projects/forUser/
が、ルート エンジンがあまりにもスマートであるように思われるため、リクエストがメソッドに/api/v1/projects?userId=1
一致する可能性があると判断し (引数名のためだと思います) 、ルートの一部を無視します。ForUser(..)
userId
{action}
この動作を回避し、アクション部分を URL で明示的に指定する必要がある方法はありますか?