1

サムネイルを返す単純なコントローラーがあり、次のように定義されています。

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

すべて正常に動作し、URL を使用して画像にアクセスできますhttp://site.com/api/Thumbnails/mylogin

しかし、このメソッドを次のように変更したいと思います。

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

アイデアは次を呼び出すことができることです:
- http://site.com/api/Thumbnails/- これは現在ログインしているユーザーの写真をデフォルト (64x64) サイズで返します
- http://site.com/api/Thumbnails/mylogin- これは mylogin ユーザーの写真をデフォルト (64x64) サイズで返します
- http://site.com/api/Thumbnails/mylogin/128- これは mylogin ユーザーの写真を 128x128 サイズで返します

私の問題はルートです。デフォルトのルートは変更されていない方法で機能しますが、これを機能させるにはデフォルトをどのように変更すればよいですか?

他の Api コントローラーも使用しますが、カスタム ルートを持つ必要があるのはこの 1 つだけです。

ここに私の試みがありますが、うまくいきません。

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 }
            );
    }
}
4

2 に答える 2