WebAPI控制器没有参数就不会命中

时间:2019-06-18 00:40:46

标签: c# asp.net-web-api

我有一个针对具有默认值的特定控制器的路由配置。控制器没有任何用于任何action方法的参数,但仅当我传递额外路径时才调用该action方法,即我的控制器为Calendar且action方法为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 :(得分:0)

我认为您在ID中缺少问号?,表明该参数是可选的

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

答案 1 :(得分:0)

我已使用此代码完成此操作,请尝试一下,让我知道:

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

我认为这就是您需要做的所有事情。因此,根据您的编辑,只需要坚持第二个MapHttpRoute声明并删除第一个声明。干杯。