Web API サービス用に次のデフォルト ルートを設定しています ...
config.Routes.MapHttpRoute(
name: "DefaultControllerWithIdAndAction",
routeTemplate: "api/{controller}/{id}/{action}",
defaults: new {action = RouteParameter.Optional}
);
config.Routes.MapHttpRoute(
name: "DefaultPost",
routeTemplate: "api/{controller}",
defaults: new { action = "Post" },
constraints: new { httpMethod = new HttpMethodConstraint(HttpMethod.Post) }
);
config.Routes.MapHttpRoute(
name: "DefaultGetWithId",
routeTemplate: "api/{controller}/{id}",
defaults: new { action = "Get" },
constraints: new { httpMethod = new HttpMethodConstraint(HttpMethod.Get) }
);
config.Routes.MapHttpRoute(
name: "DefaultPutWithId",
routeTemplate: "api/{controller}/{id}",
defaults: new { action = "Put" },
constraints: new { httpMethod = new HttpMethodConstraint(HttpMethod.Put) }
);
config.Routes.MapHttpRoute(
name: "DefaultDeleteWithId",
routeTemplate: "api/{controller}/{id}",
defaults: new { action = "Delete" },
constraints: new { httpMethod = new HttpMethodConstraint(HttpMethod.Delete) }
);
config.Routes.MapHttpRoute(
name: "DefaultControllerWithAction",
routeTemplate: "api/{controller}/{action}",
defaults: new { action = RouteParameter.Optional }
);
「UsersController」の下に次のサービスがあります。
public UserDto Get(string id){}
[HttpGet]
public UserDto ByEmail(string email)
[HttpGet]
public bool IsEmailUnique(string email)
問題は、3 つのサービスのいずれかにアクセスしようとすると、「複数のアクションが見つかりました」というエラーが表示されることです。リクエストは、すべてのルートから最後のルートを選択して、リクエストを実行する必要があります。
「/api/users/byemail?email=blah@blah.com」を実行する場合、「ByEmail」がアクションであり、メソッドとアクションを使用して正しいメソッドと一致することを知ってはいけませんか? 私は何かが欠けていると思います。