Asp.net webapi路由

时间:2014-07-24 12:24:45

标签: c# asp.net-web-api asp.net-mvc-routing

我遇到路由通用控制器方法的问题。我有这样的控制器类。

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}

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

1 个答案:

答案 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);
    }
}