【问题标题】:Asp.Net WebApi RoutingAsp.Net WebApi 路由
【发布时间】:2014-07-24 12:24:44
【问题描述】:

我对路由通用控制器方法有疑问。我有这样的控制器类。

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> { }

我想在 url 上有 api 方法

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

但网址是

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

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

【问题讨论】:

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


    【解决方案1】:

    使用[Route]属性:

    [HttpGet]
    [Route("GetByName/{name:string}")]
    public T GetByName(string name)
    {
        return repository.GetByName(name);
    }
    

    WebApiConfig 中是否启用了基于属性的路由?

    根据WebAPI 2.2 documentation你需要如下配置:

    config.MapHttpAttributeRoutes(new CustomDirectRouteProvider());
    public class CustomDirectRouteProvider : DefaultDirectRouteProvider
    {
        protected override IReadOnlyList 
        GetActionRouteFactories(HttpActionDescriptor actionDescriptor)
        {
            return actionDescriptor.GetCustomAttributes
            (inherit: true);
        }
    }
    

    【讨论】:

    • 通用控制器不行,问之前我试过了。
    • 你使用的是WebApi 2.2吗?
    • 是的,对不起,我忘了提。我使用 Web api 2.2 和 MVC 5.2
    • 您是否添加了必要的配置(请参阅我编辑的帖子)?
    猜你喜欢
    • 2017-08-05
    • 2013-07-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-23
    • 2016-04-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多