【问题标题】:WebApi 2 Building nested route using attribute routing. Results in mapping to two controllers at the same timeWebApi 2 使用属性路由构建嵌套路由。导致同时映射到两个控制器
【发布时间】:2014-09-16 13:41:38
【问题描述】:

我有两个控制器,一个名为“Products”,另一个名为“ProductsGroup”

[RoutePrefix("api/{clientUrl}/products")]
public class ProductsController : BaseApiController
{
    /// <summary>
    /// Get all products from a client
    /// </summary>
    /// <returns></returns>
    [Route("")]
    public HttpResponseMessage Get()
    {
        var model = Repository.GetProducts(ClientId).Select(p => ModelFactory.Create<ProductsModel>(p));
        return Request.CreateResponse(HttpStatusCode.OK, model);
    }
}

[RoutePrefix("api/{clientUrl}/products/groups")]
public class ProductGroupsController : BaseApiController
{
    /// <summary>
    /// Get all productgroups
    /// </summary>
    /// <returns></returns>
    [Route("")]
    public HttpResponseMessage Get()
    {
        var model = Repository.GetProductGroups(ClientId);
        return Request.CreateResponse(HttpStatusCode.OK, model);
    }
}

当我像这样路由时,由于“找到与 URL 匹配的多个控制器类型”,我无法访问 ProductGroupsController

是否可以让路由忽略url中的“products”部分,只映射到productgroupscontroller?

【问题讨论】:

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


    【解决方案1】:

    考虑为两者使用单个控制器:

    [RoutePrefix("api/{clientUrl}/products")]
    public class ProductsController : BaseApiController
    {
        [Route("")]
        public HttpResponseMessage GetProducts()  {}
    
        [Route("groups")]
        public HttpResponseMessage GetProductGroups()  {}
    }
    

    或者不要使用RoutePrefixes:

    public class ProductsController : BaseApiController
    {
        [Route("api/{clientUrl}/products")]
        public HttpResponseMessage Get()  {}
    }
    
    public class ProductGroupsController : BaseApiController
    {
        [Route("api/{clientUrl}/products/groups")]
        public HttpResponseMessage Get()    {  }
    }
    

    【讨论】:

    • 那么,我会选择单控制器。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-06-14
    • 2021-09-21
    • 2016-01-16
    • 2019-06-09
    • 1970-01-01
    • 1970-01-01
    • 2014-09-26
    相关资源
    最近更新 更多