2015-10-11 49 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