武士刀OWIN版本控制

本文关键字:版本控制 OWIN 武士刀 | 更新日期: 2023-09-27 18:37:14

我是 ASP.net,武士刀等的新手,但学得很快。 最佳做法之一是对控制器使用版本。 例如:

http://localhot.com:7301/api/v1/{控制器}/{连接} http://localhot.com:7301/api/v2/{控制器}/{连接}

启动.cs :

config.Routes.MapHttpRoute(
    name: "DefaultApi",
    routeTemplate: "api/{version}/{controller}/{conn}/{cmd}",
    defaults: new 
        { 
           conn = RouteParameter.Optional, 
           cmd = RouteParameter.Optional 
        }
);

连接控制器.cs(这有效)

[RoutePrefix("v1/Connection")]
public class ConnectionController : ApiController 
{
    public List<RadioComConnConfig> Get()
    {
        var state = ServerState.Create();
        var conList = new List<RadioComConnConfig>();
        foreach( var act in state.ActiveRadios)
        {
            conList.Add(act.CommPort);
        }
        return conList;
    }

这不行

[RoutePrefix("v1/Connection")]
public class V1ConnectionController : ApiController 
{
    public List<RadioComConnConfig> Get()
    {
        var state = ServerState.Create();
        var conList = new List<RadioComConnConfig>();

我错过了什么?

武士刀OWIN版本控制

你可以摆脱旧式的配置路由:

config.Routes.MapHttpRoute(
    name: "DefaultApi",
    routeTemplate: "api/{version}/{controller}/{conn}/{cmd}",
    defaults: new 
        { 
           conn = RouteParameter.Optional, 
           cmd = RouteParameter.Optional 
        }
);

并仅使用属性 ruoting(就像您正在做的那样)。

在您的WebApiConfig评论中,请对此发表评论:

// config.Routes.MapHttpRoute(
//     name: "DefaultApi",
//     routeTemplate: "api/{version}/{controller}/{conn}/{cmd}",
//     defaults: new 
//         { 
//            conn = RouteParameter.Optional, 
//            cmd = RouteParameter.Optional 
//         }
// );

并使用它:

// Web API routes
config.MapHttpAttributeRoutes();

控制器顶部的路由前缀应如下所示:

[RoutePrefix("api/v1")]

[RoutePrefix("api/v2")]

并定义操作的路由:

[Route("Connection")]
public List<RadioComConnConfig> Get()
{
}