Маршрутизация WEB API с несколькими действиями Get

Я новичок в WEB API и стараюсь следовать методологии маршрутизации, настроенной на сайте

В моем контроллере у меня есть все стандартные действия на основе глагола Get... Delete.

У меня также есть некоторые другие действия на основе Get Verb. Мы регистрируем маршруты для каждого контроллера, а ниже - моя настройка маршрута. Смотри ниже. Мои методы действий имеют атрибуты, как показано ниже. Однако, когда я http://server:49279/api/Licenses например, http://server:49279/api/Licenses я получаю сообщение об ошибке "MultipleActions match". Поиск действий, SearchByArtistId

Не знаете, как обращаться с этим, когда контроллер жестко закодирован

Любая помощь будет ценной, поскольку я не могу найти решение в Интернете

благодаря

[System.Web.Http.AcceptVerbs(new string[] { "Get" })]
[System.Web.Http.ActionName("PublishersByLicense")]
public HttpResponseMessage PublishersByLicense(Guid Id)
{
string vControllerName="Licenses";
config.Routes.MapHttpRoute
 (
 name: "PublishersByLicense" + vControllerName,
 routeTemplate: "api/" + vControllerName + "/" + "PublishersByLicense" + "/{aLicenseId}",
 defaults: new
 {
 controller = vControllerName,
 action = "PublishersByLicense"
 },
 constraints: new
 {
 httpMethod = new HttpMethodConstraint(HttpMethod.Get)
 }
 );


 config.Routes.MapHttpRoute
 (
 name: "Search" + vControllerName,
 routeTemplate: "api/" + vControllerName + "/" + "Search" + "/{aTrackIds}",
 defaults: new
 {
 controller = vControllerName,
 action = "Search"
 },
 constraints: new
 {
 httpMethod = new HttpMethodConstraint(HttpMethod.Get)
 }
 );



 config.Routes.MapHttpRoute
 (
 name: "GetAll" + vControllerName,
 routeTemplate: "api/" + vControllerName,
 defaults: new
 {
 controller = vControllerName
 },
 constraints: new
 {
 httpMethod = new HttpMethodConstraint(HttpMethod.Get)
 }
 );


 config.Routes.MapHttpRoute
 (
 name: "GetSingle" + vControllerName,
 routeTemplate: "api/" + vControllerName + "/{aLicenseId}",
 defaults: new
 {
 controller = vControllerName
 },
 constraints: new
 {
 httpMethod = new HttpMethodConstraint(HttpMethod.Get)
 }
 );

Вот мой код контроллера

[System.Web.Http.AcceptVerbs(new string[] { "Get" })]
[System.Web.Http.ActionName("Search")]
public HttpResponseMessage Search([FromUri]Guid[] aTrackIds)
{
public HttpResponseMessage Get()
{
1 ответ

Запрос на http://server:49279/api/Licenses будут сопоставляться третьим определяемым вами маршрутом:

config.Routes.MapHttpRoute
(
 name: "GetAll" + vControllerName,
 routeTemplate: "api/" + vControllerName,
 defaults: new
 {
 controller = vControllerName
 },
 constraints: new
 {
 httpMethod = new HttpMethodConstraint(HttpMethod.Get)
 }
);

Поскольку вы явно не указываете в нем значение маршрута action, Web API пытается найти наиболее подходящее действие.

Я не знаю вашего кода контроллера, но я полагаю, что как Search и SearchByArtistId имеют одинаковое количество параметров, которые могут быть заполнены из данных запроса, что делает их одинаково хорошими (или плохими) выборами действий. Вот почему Web API не может однозначно выбрать одно правильное действие.

licensed under cc by-sa 3.0 with attribution.