Несколько действий приложения Azure API с одним и тем же глаголом и разными маршрутами вызывают ошибку чванства

У меня есть ApiController с этими GET:

public class UsersController : ApiController
{
    public IHttpActionResult GetUsers()
    {
        [...]
    }

    public IHttpActionResult GetUsers(guid ID)
    {
        [...]
    }

    [Route("api/Users/{CodeA}/{CodeB}")]
    public IHttpActionResult GetUsers(string CodeA, string CodeB)
    {
        [...]
    }
}

Маршрутизация в webapiconfig.cs стандартная:

config.Routes.MapHttpRoute(
            name: "DefaultApi",
            routeTemplate: "api/{controller}/{id}/",
            defaults: new { id = RouteParameter.Optional}
);

Пытаясь использовать swaggerUI, я получаю ошибку 500, а скрипачом я получаю:

Не поддерживается Swagger 2.0: несколько операций с путем 'api / utenti' и методом 'GET'. См. Параметр конфигурации - \ "ResolveConflictingActions \" для потенциального обходного пути »

Если я удалю последний метод GET, swagger правильно проанализирует api. Я читал из многих источников, что проблема решается путем указания другого маршрута, и я попытался добиться этого, добавив атрибут Route к последнему действию.

Может кто-нибудь указать мне правильное направление?

Заранее спасибо.


person Kiske1    schedule 07.03.2017    source источник
comment
Вы пробовали добавлять атрибуты Route ко всем своим методам действий и контроллеру?   -  person bwyn    schedule 07.03.2017
comment
Да, но результат тот же.   -  person Kiske1    schedule 07.03.2017


Ответы (1)


У меня сработал следующий код:

[Route("users")]
public class UsersController : ApiController
{
    [Route("")]
    public IHttpActionResult GetUsers()
    {
        string test = "";
        return Ok(test);
    }
    [Route("{id}")]
    public IHttpActionResult GetUsers(Guid id)
    {
        string test = "";
        return Ok(test);
    }

    [Route("{CodeA}/{CodeB}")]
    public IHttpActionResult GetUsers(string CodeA, string CodeB)
    {
        string test = "";
        return Ok(test);
    }
}
person bwyn    schedule 08.03.2017
comment
Я пробовал это, но получаю такую ​​же многократную ошибку получения, что и раньше - person Kiske1; 08.03.2017
comment
Я установил это следующим образом: новый пустой проект веб-API, установил swashbuckle swagger для веб-API из nuget и создал контроллер с приведенным выше кодом. Я использовал Visual Studio 2013 и веб-API 2. Я также добавил файл index.html и установил его в качестве начальной страницы. Если вы продублируете мою настройку, вы все равно получите ошибку? - person bwyn; 08.03.2017
comment
На самом деле я использую VS2015, и проект создается на основе шаблона мобильного приложения Azure, который должен быть почти таким же, как проект WebAPI с двумя примерами контроллеров в дополнение. В VS2015 я не могу найти возможность использовать пустой шаблон WebAPI. У меня не установлен VS2013, поэтому я не могу повторить ваш тест. - person Kiske1; 09.03.2017
comment
На этот раз я использовал VS2015, создал новое веб-приложение ASP.NET (.NET Framework), использовал пустой шаблон и включил ссылки на веб-API, создал контроллер с приведенным выше кодом, создал страницу index.html и установил последнюю стабильную версию. автомата. Swagger работал нормально. Затем я попытался использовать мобильный шаблон с чванством, и похоже, что требуется несколько настроек чванства (он не работал). У меня сейчас нет времени больше с этим поиграться. - person bwyn; 09.03.2017
comment
Возможно, вы можете воспроизвести мою последнюю настройку только с VS2015 и веб-API и проверить, действительно ли ваша маршрутизация / контроллер является источником проблемы? - person bwyn; 09.03.2017
comment
Да! ваша последняя настройка работала, поэтому я столкнулся с ней и обнаружил, что мне не хватало только config.MapHttpAttributeRoutes (); в методе регистрации webapiconfig.cs. Спасибо за ваше время и помощь! - person Kiske1; 09.03.2017
comment
Без проблем. Рад слышать, что вы смогли ее решить. - person bwyn; 09.03.2017