У меня есть следующие настройки маршрутов по умолчанию для моего веб-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)
проблема в том, что я получаю ошибку «Несколько действий были найдены», когда пытаюсь ударить любую из трех служб. Запрос должен выбрать последний маршрут из всех маршрутов и выполнить запрос.
Если я должен был выполнить «/api/users/[email protected]», не должен знать, что «ByEmail» - это действие и с помощью метода & действие соответствует правильному методу? Наверное, я что-то упускаю.
Я думал, что «HttpGet» необходимо, чтобы позволить апи знать, что сервис ожидает запрос Получить только. В противном случае это POST по умолчанию. – Skadoosh
Doh ... да, мой плохой, извините за эту ошибку. Кажется, что существует проблема смешения традиционной и глагольной маршрутизации в том же ApiController. Это описано здесь: http://aspnetwebstack.codeplex.com/workitem/184, и есть одно сообщение в блоге, которое утверждает, что оно решило это: http://blog.appliedis.com/2013/03/25/web- api-mix-традиционный-глагол-на основе маршрутизации/Надеюсь, что это помогает больше, чем мой deadwrong ответ .. – AardVark71