2014-07-24 107 views
0

我有路由通用控制器方法的问题。我有这样的控制器类。Asp.net webapi路由

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方法的URL

GET ~/api/public/Photos/GetByName/{name} 

但网址是

GET ~/api/public/Photos?name={name} 

我有什么错?什么是这样做路由的正确方法?

回答

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); 
    } 
} 
+0

它不会对通用控制器的工作,我尝试了我以前问。 – Peter

+0

你使用WebApi 2.2吗? – Sabacc

+0

是的,抱歉,我忘了提及这一点。我使用Web api 2.2和MVC 5.2 – Peter