【发布时间】:2013-03-27 00:09:29
【问题描述】:
在我的RouteConfig 我有:
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute("ApiController", "api/{controller}");
routes.MapRoute("ApiControllerAndIntegerId", "api/{controller}/{id}", null, new { id = @"^\d+$" });
routes.MapRoute("ApiControllerActions", "api/{controller}/{action}");
}
然后我有一个LookupController。
public class LookupsController : ApiController
{
public string Get()
{
return "Default Get";
}
// /api/lookups/custom
[ActionName("custom")]
public string CustomLookup()
{
return "Hello, World";
}
}
如果我导航到/api/lookups/custom,我仍然会得到Default Get 而不是Hello, World。我做错了什么?
编辑
我尝试了MapHttpRoute 和MapRoute 的不同变体。两者似乎都不起作用。
【问题讨论】:
-
对于初学者,您应该使用
MapHttpRoute,因为这是用于 Web API 路由,MapRoute用于 ASP.NET MVC。比尝试更改路线顺序(首先是最具体的路线),您可能会得到您想要的。 -
@tpeczek 在我正在观看的培训视频之后,培训师执行
File > New > MVC 4 Web Application > Web API和MapRoute是RoutesConfig中的默认值。这是错的吗? -
此模板同时使用 ASP.NET MVC(用于表示层)和 ASP.NET Web API(用于 API 层),因此您可以看到这两种方法。事实上,这是两种不同的技术。这让我想到了下一个问题。您从哪个命名空间使用
ActionNameAttribute?对于 Web API,它应该是System.Web.Http(但 ASP.NET MVC 在System.Web.Mvc命名空间中有自己的版本)。记住路线顺序,在这里阅读更多:stackoverflow.com/questions/15553620/… -
@tpeczek
ActionNameAttribute在这种情况下来自System.Web.Http。
标签: c# asp.net-mvc-4 asp.net-web-api