为什么没有找到路线的行动?

时间:2015-01-13 19:21:05

标签: asp.net-web-api

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

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

我的CalendarController类只有这个方法:

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。

如果有这么多隐藏的魔法,我可以对一个简单的例子进行微调,而不会一切都崩溃。

2 个答案:

答案 0 :(得分:1)

您的路线将dateStr参数标记为可选,但方法签名不是。尝试在dateStr参数中添加默认值:

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

答案 1 :(得分:0)

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

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