为什么找不到路线的动作?

Why was no action found for route?

我的 WebApiConfig.cs 只包含这条路线:

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

而我的 CalendarController class 只有这个方法:

public IEnumerable<FVEvent> Get( string dateStr )
{
    return db.Events.ToList();
}

但是当我尝试在浏览器中点击 /api/Calendar 时,我在 XML 中得到以下 MessageDetail:

No action was found on the controller 'Calendar' that matches the request.

另外我不知道为什么是 XML,我希望它是 JSON。

隐藏的魔法实在是太多了,我无法对一个简单的示例进行细微调整,否则一切都会崩溃。

确保您的日历控制器的名称以 Controller 结尾。还可以在 WebAPI 配置中使用以下代码删除 XML 格式化程序。

var appXmlType = config.Formatters.XmlFormatter.SupportedMediaTypes.FirstOrDefault(t => t.MediaType == "application/xml");
config.Formatters.XmlFormatter.SupportedMediaTypes.Remove(appXmlType);

您的路由将 dateStr 参数标记为可选,但方法签名没有。尝试为您的 dateStr 参数添加一个默认值:

public IEnumerable<FVEvent> Get(string dateStr = "")
{
    return db.Events.ToList();
}