2017-02-14 53 views
0

我有關於在Web Api的路由配置非常簡單的問題。路由配置挑戰與附加參數

我的目標是將兩種方法合併爲一種。

[HttpGet] 
[Route("foo/bar")] 
public HttpResponseMessage TestMethod() 
{ 
    //TODO: Implement 
    return new HttpResponseMessage(HttpStatusCode.OK); 
} 



[HttpGet] 
[Route("foo/bar/{element}")] 
public HttpResponseMessage AnotherTestMethod(string element) 
{ 
    //TODO: Implement 
    return new HttpResponseMessage(HttpStatusCode.OK); 
} 

代碼粘貼在上面的作品。

當然,我已閱讀了一些關於定製路線的教程,但是我沒有成功。字符串元素是可選的。

這是我在RouteConfig嘗試:

public class RouteConfig 
{ 
    public static void RegisterRoutes(RouteCollection routes) 
    { 
     routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 

     routes.MapRoute(
      name: "Default", 
      url: "{controller}/{action}/{id}", 
      defaults: new { controller = "MyController", action = "DefaultTestMethod", id = UrlParameter.Optional } 
     ); 

     routes.MapRoute(
      name: "PropertyDefinitions", 
      url: "foo/bar/{element}", 
      defaults: new { controller = "MyController", action = "TestMethod", element = UrlParameter.Optional} 
     );   
    } 
} 

謝謝你的任何提示或幫助。

回答

1

您可以指定element的默認值。並且在路由參數中聲明該變量爲可空。這將該參數視爲可選。

[Route("foo/bar/{element?}")] 
public HttpResponseMessage TestMethod(string element = null) 
+0

謝謝!這很容易:-)。 – Mozartos

0

爲什麼不只使用下面的一種方法。

[HttpGet] 
[Route("foo/bar/{string element}")] 
public HttpResponseMessage TestMethod(string element) 
{ 
//TODO: Implement 
return new HttpResponseMessage(HttpStatusCode.OK); 
} 

如您所知,無論元素參數是否設置,TestMethod()都會被調用。

+0

謝謝你的幫助。然而它不起作用:-(或者我可能沒有看到你的觀點。 – Mozartos