2013-10-15 92 views
1

我有一個簡單的控制器,它返回的縮略圖,它的定義如下:ASP.NET的WebAPI定製路線

public class ThumbnailsController : ApiController 
{ 
    public HttpResponseMessage Get(string id) 
    { 
     //code here 
    } 
} 

一切工作正常,我可以使用URL

訪問圖像,但我想修改此方法像這樣:

public class ThumbnailsController : ApiController 
{ 
    public HttpResponseMessage Get(string login="", int size=64) 
    { 
     //code here 
    } 
} 

想法是能夠調用:
- http://site.com/api/Thumbnails/ - 這將漚金塔當前登錄的用戶的圖片在默認情況下(64×64)大小
- - 在128×128大小

我的問題是這將返回mylogin用戶圖片 - 這將返回mylogin在默認情況下(64×64)尺寸
用戶圖片 - http://site.com/api/Thumbnails/mylogin/128路線,默認路線與我不變的方法一起工作,但我應該如何更改默認值才能使其工作?

我也會有其他Api控制器,但只有這個應該有自定義路由。

這是我的嘗試,但它不工作。

routes.MapHttpRoute(
      name: "Thumbnails", 
      routeTemplate: "api/thumbnails/{login}/{size}", 
      defaults: new {controller="Thumbnails", action="Get", login = RouteParameter.Optional, size = RouteParameter.Optional } 
      ); 

編輯 這是我的控制器測試方法:

public class ThumbnailsController : ApiController 
{ 
    public string Get(string login="", int size=64) 
    { 
     return string.Format("login: {0}, size: {1}", login, size); 
    } 
} 

這裏是我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 = "Home", action = "Index", id = UrlParameter.Optional} 
      ); 

     routes.MapHttpRoute(
      name: "Thumbnails", 
      routeTemplate: "api/Thumbnails/{login}/{size}", 
      defaults: new { controller = "Thumbnails" , login = RouteParameter.Optional, size = RouteParameter.Optional } 
      ); 
    } 
} 

回答

7

確保您的默認路由之前宣佈自定義路線在WebApiConfig中。 編輯:

public static void Register(HttpConfiguration config) 
{ 
    config.Routes.MapHttpRoute(
    name: "Thumbnails", 
    routeTemplate: "api/Thumbnails/{login}/{size}", 
    defaults: new { controller = "Thumbnails", action = "Get", 
     login = RouteParameter.Optional, size = RouteParameter.Optional } 
    ); 

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

我沒有申報默認路由,就這一點,因爲現在我只有這個網頁API控制器 – Misiu

+0

我複製了你的代碼,一切似乎都在這裏工作。你是否收到錯誤信息,或者你的電話沒有打到控制器? –

+0

我的參數不傳遞給方法,它獲取默認值。我將修改我的問題,並添加測試方法 – Misiu

1

定製的路線應該是默認的前一個 公共靜態無效的RegisterRoutes(RouteCollection路線) { routes.IgnoreRoute( 「{}資源個.axd/{*} PATHINFO」);

routes.MapHttpRoute(
     name: "Thumbnails", 
     routeTemplate: "api/Thumbnails/{login}/{size}", 
     defaults: new { controller = "Thumbnails" , login = RouteParameter.Optional, size = RouteParameter.Optional } 
     ); 

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

並嘗試改變「大小」,以空整數類型:

public HttpResponseMessage Get(string login = null, int? size = 64) 
+0

感謝您的幫助,遺憾的是我無法將更多答案作爲正確答案,但是@Jonny對路線宣言的評論解決了我的問題。 – Misiu

+0

不客氣,我的朋友:) –