我遇到路由通用控制器方法的问题。我有这样的控制器类。
public abstract class ModelsController<T> : ApiController where T : IModel
{
[GET("GetByName/{name:string}")]
public T GetByName(string name)
{
return repository.GetByName(name);
}
}
[RoutePrefix("Events")]
public class EventsController : ModelsController<IEventModel> { }
我想在网址上有api方法
GET ~/api/public/Photos/GetByName/{name}
但是网址是
GET ~/api/public/Photos?name={name}
我错了什么?什么是这样做路由的正确方法?
答案 0 :(得分:0)
使用[Route]
属性:
[HttpGet]
[Route("GetByName/{name:string}")]
public T GetByName(string name)
{
return repository.GetByName(name);
}
是否在WebApiConfig中启用了基于属性的路由?
根据网络API 2.2 documentation,您需要以下配置:
config.MapHttpAttributeRoutes(new CustomDirectRouteProvider());
public class CustomDirectRouteProvider : DefaultDirectRouteProvider
{
protected override IReadOnlyList
GetActionRouteFactories(HttpActionDescriptor actionDescriptor)
{
return actionDescriptor.GetCustomAttributes
(inherit: true);
}
}