c# - WebApi 2 使用属性路由构建嵌套路由。结果同时映射到两个 Controller

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

我有两个 Controller ,一个名为“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);
    }
}

当我像这样路由 ProductGroupsController 时,由于“发现与 URL 匹配的多个 Controller 类型”,我无法访问

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

最佳答案

考虑对两者使用单个 Controller :

[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()    {  }
}

关于c# - WebApi 2 使用属性路由构建嵌套路由。结果同时映射到两个 Controller ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25870412/

相关文章:

asp.net - MVC 6 WebAPI 返回序列化的 HttpResponseMessage 而不是文件流

c# - 具有相同路由前缀 ASP.NET Web Api 的多个 Controller 类型

c# - 扩展 DefaultDirectRouteProvider 的 ASP.NET Web API

c# - Web API 路由操作

c# - .NET core WebAPI POST 中的奇怪主体。序列化不正确?

c# - MVC5 自定义绑定(bind) : List of Strings to List of Complex Type

c# - F# 类将接口(interface)实现为私有(private)成员,为什么?

c# - 如何生成 appsettings.<EnvironmentName>.json 文件?

c# - 无法设置 AuthenticationHeaderValue

c# - Web API - REST 帮助和说明