【问题标题】:Restrict API route to controller namespace with ASP.NET使用 ASP.NET 将 API 路由限制到控制器命名空间
【发布时间】:2017-01-28 04:39:50
【问题描述】:

我发现了一个与标准 asp.net 控制器相关的类似问题,但我已经尝试过了,但它似乎不适用于 apicontroller。

Restrict route to controller namespace in ASP.NET Core

我希望将来可以弃用 API,而无需更改 url。为了解决这个问题,我将在路线的开头放置一个版本前缀。这样,我可以在不破坏与此 API 的任何集成的情况下向端点添加一些修改。

    config.Routes.MapHttpRoute(
        name: "V1 API",
        routeTemplate: "v1/{controller}/{action}/{id}",
        defaults: new { id = RouteParameter.Optional }

    );
    config.Routes.MapHttpRoute(
        name: "V2 API",
        routeTemplate: "v2/{controller}/{action}/{id}",
        defaults: new { id = RouteParameter.Optional }

    );

我希望保持相同的控制器名称,并且在大多数情况下,一切都将完全相同,响应和请求正文将是唯一改变的东西。我试图在控制器文件夹中添加一个子目录,以便将 v1 和 v2 添加到控制器的命名空间,但我收到一个错误,提示有 2 个控制器具有相同的名称。

如何修改路由,使其指向控制器的 v1 命名空间,而不仅仅是搜索控制器中的任何类。我不想将版本添加到控制器名称中,因为我想让修订更新尽可能无缝。

【问题讨论】:

    标签: c# asp.net asp.net-mvc asp.net-mvc-4


    【解决方案1】:

    我认为你可以通过为每个控制器添加路由前缀来解决这个问题。

    【讨论】:

      【解决方案2】:

      可以使用 URL 查询参数吗?

      https://localhost:8000/{controller}/{action}/{id}?version=?

      然后,您可以使用控制器中的控制流来根据版本确定要使用的逻辑。

      【讨论】:

      • 我如何使用它来将请求路由到正确的控制器?
      • 如果您想为每个版本使用单独的控制器,@TarekAboELkheir 发布的解决方案会起作用。我发现的唯一问题是 v2{ControllerName} 看起来有点笨拙。
      猜你喜欢
      • 2023-03-16
      • 2012-02-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多