我有一个针对具有默认值的特定控制器的路由配置。控制器没有任何用于任何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 }
);
答案 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声明并删除第一个声明。干杯。