【问题标题】:Versioning using Attribute Routing in ASP .net WEB API在 ASP .net WEB API 中使用属性路由进行版本控制
【发布时间】:2014-06-09 03:39:45
【问题描述】:

我正在尝试在 WEB API 中使用 AttributeRouting 来实现版本控制。我在控制器下定义了两个文件夹,分别称为 v1 和 v2。我在每个文件夹中有多个控制器。在产品控制器中,我定义了

RoutePrefix 为 [RoutePrefix("v1/product")] 和 [RoutePrefix("v2/product")]

当我转到 URI v1/product 时,它工作正常,但是 v2/product 也会执行 v1 文件夹中的代码。属性路由是否支持版本控制,或者我是否也必须做一些与路由相关的事情。我的路线定义为

config.Routes.MapHttpRoute(
            name: "DefaultApi",
            routeTemplate: "{namespace}/{controller}/{id}",
            defaults: new { id = RouteParameter.Optional}
        );

我的产品控制器看起来像

namespace API.Controllers
{

[RoutePrefix("v1/product")] 

public class Productv1Controller : ApiController

{

    private DBContext db = new DBContext(); 


    public dynamic Get()
    {
       //Gets the Products
    }
}

V2产品中的代码是

namespace API.Controllers
{

[RoutePrefix("v2/product")] 

public class Productv2Controller : ApiController

{

    private DBContext db = new DBContext(); 


    public dynamic Get()
    {
       //Gets the Products
    }
}

有人可以建议或提供一个示例链接以使用属性路由实现版本控制

【问题讨论】:

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


    【解决方案1】:

    您需要使用 Route 属性来装饰动作以使其工作。

    [Route] public dynamic Get() ...

    另外,您需要在 WebApiConfig 的 Register 方法中有 config.MapHttpAttributeRoutes();

    更新

    这是要点的链接,我在一个新的 Web 应用程序中使用 WebApi 5 对此进行了测试,并且它有效。 https://gist.github.com/DavidDeSloovere/11367286

    【讨论】:

    • 我将 [Route("v1/product")] 和 [Route("v2/product")] 添加到 GET 方法中,但它仍然无法正常工作。无论 ROUTE 中指定的路径如何,它总是会转到 /v1/product。
    • 在Route属性中不要重复RoutePrefix属性的前缀。如果你想覆盖前缀,那么你可以做类似 [Route("~v0/product")]
    • 感谢您的要点!我想知道控制器类名中的数字匹配是如何工作的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-07
    • 1970-01-01
    • 2020-10-03
    • 1970-01-01
    • 2014-12-06
    • 1970-01-01
    相关资源
    最近更新 更多