我有一个简单的控制器,它返回缩略图,定义如下:
public class ThumbnailsController : ApiController
{
public HttpResponseMessage Get(string id)
{
//code here
}
}
一切正常,我可以使用网址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
- 这将返回默认(64x64)大小的mylogin用户图片
- http://site.com/api/Thumbnails/mylogin/128
- 这将返回128x128大小的mylogin用户图片
我的问题是路由,默认路由与我未更改的方法一起工作,但我应该如何更改默认值以使其工作?
我还会有其他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 }
);
}
}
答案 0 :(得分: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 }
);
}
答案 1 :(得分:1)
自定义路线应该在默认路线之前 public static void RegisterRoutes(RouteCollection routes) { 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}
);
}
并尝试将“size”的类型更改为可以为null的整数:
public HttpResponseMessage Get(string login = null, int? size = 64)