使用ASP.NET

时间:2017-01-27 17:03:08

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

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

Restrict route to controller namespace in ASP.NET Core

我想允许将来弃用API,而无需更改网址。为了解决这个问题,我将在路径的开头添加一个版本前缀。通过这种方式,我可以在不破坏与此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 }

    );

我想保留相同的控制器名称,在大多数情况下,所有内容都完全相同,响应和请求正文将是唯一发生变化的内容。我试图在controllers文件夹中添加一个子目录,以便将v1和v2添加到控制器的命名空间,但是我得到一个错误,即有2个控制器具有相同的名称。

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

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

您可以使用网址查询参数吗?

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

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