Контроллер WebAPI не работает без параметра - PullRequest
0 голосов
/ 18 июня 2019

У меня есть конфигурация маршрута, которая нацелена на определенный контроллер со значениями по умолчанию. Контроллер не имеет никаких параметров ни для одного из методов действия, но метод действия вызывается только когда я передаю дополнительный путь, т. Е. Мой контроллер - Календарь, а метод действия - GetCalendarDays. Я ожидал, что он будет вызываться для API/calendar/GetCalendarDays, но он вызывается только тогда, когда я пытаюсь API/calendar/GetCalendarDays/X Я пробовал разные комбинации для конфигурации маршрута, но ничего не получалось. Я не хочу использовать атрибуты Route, потому что я пытаюсь заменить текущую проблему

Я пробовал несколько решений, которые я нашел здесь, но ничто не помогает

    public class CalendarController : ApiController
    {
        public IEnumerable<CalendarMonth> GetCalendarMonths()
        {
            return CalendarHelper.GetCalendarMonths();
        }

        public dynamic GetCalendarDays()
        {
            return CalendarHelper.GetCalendarDays();
        }
     }


    config.MapHttpAttributeRoutes();

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

Ответы [ 2 ]

0 голосов
/ 18 июня 2019

Я сделал это, используя этот код, попробуйте и дайте мне знать:

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

Я думаю, это все, что тебе нужно сделать. Итак, согласно вашему редактированию, вам нужно только придерживаться вашего второго объявления MapHttpRoute и удалить первое. Приветствия.

0 голосов
/ 18 июня 2019

Я думаю, вам не хватает знака вопроса ? в идентификаторе, который указывает, что параметр является необязательным

routeTemplate: "api/{controller}/{action}/{id?}"

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...