在我的ASP.NET Web API项目中,我在Global.asax
中定义了以下路由:
routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "{controller}/{action}"
);
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}"
);
我有一个名为UserFeedController
的控制器,其操作具有以下签名:
public UserFeedResponseViewModel GetUserFeed(int id)
当我输入网址http://api.mydomain.com/UserFeed/GetUserFeed/4
时,我收到404.为什么第二个路由规则不适用?
MVC路由完全无法理解。
答案 0 :(得分:2)
你的两条路线基本相同。 MVC找到第一个匹配的路由,因为你已经指定了一个控制器和一个动作,它认为你很好。它将忽略您指定的id(我相信它可能会尝试将其作为参数传递)。
我建议改变你的第一条路线,在开头包括API /,如下:
routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "API/{controller}/{action}"
);
routes.MapHttpRoute(
name: "Default",
url: "{controller}/{action}/{id}"
);
这将确保您的路线正常运作。