2015-10-11 29 views
0

我有以下的API类和方法:C#阿比控制器路由忽略行动

public class LicenceController : ApiController 
    { 
     /// <summary> 
     /// Checks whether the person has a verified licence 
     /// </summary> 
     /// <param name="forename">Person's first name</param> 
     /// <param name="surname">Person's second name</param> 
     /// <returns></returns> 
     [System.Web.Http.HttpGet] 
     public bool Verify(string forename, string surname) 
     { 
      return true; 
     } 
} 

而下面WebApiConfig.cs

public static void Register(HttpConfiguration config) 
     { 
      config.MapHttpAttributeRoutes(); 

      config.Routes.MapHttpRoute(
       name: "DefaultApi", 
       routeTemplate: "api/{controller}/{id}", 
       defaults: new { id = RouteParameter.Optional } 
      ); 

      config.Routes.MapHttpRoute(
       name: "Verify", 
       routeTemplate: "api/{controller}/{action}/{forename}/{surname}/{licence}" 
      ); 

     } 

当我尝试打电话给我的API方法在浏览器下面的URL然后它工作正常: http://localhost/api/Licence/Verify?forename=Sam&surname=Jones

但是,如果我输入另一个动作名称,而不是验证,那么它也路由到相同的方法... ide盟友我喜欢它错误,因为行动不存在。所以,如果我输入: http://localhost/api/Licence/ThisActionDoesntExist?forename=Sam&surname=Jones 于是,去年URL应该错误...但它解决了同一个地方。我的路由配置有错误吗?

回答

0

路由在MVC是依赖于你在你的配置中指定的规则的顺序。在这种情况下, URL由第一规则拿起因为你没有指定动作来调用,它试图使在这种情况下是唯一可能的动作,允许获得一个最好的猜测请求。

+0

宾果!我在第一条规则的路由模板中添加了一个{action},并且该路由模板似乎正在工作:) config.Routes.MapHttpRoute( name:“DefaultApi”, routeTemplate:“api/{controller}/{action } /(编号)”, 的默认值:新{ID = RouteParameter.Optional} ); – Adrian