我继承了一个遗留的 WebAPI 系统,该系统目前在路由模式中使用下划线来表示版本。例如/api/1_0/account
,/api/1_1/account
等等。
我正在尝试更新自动生成的文档以使用 Swagger,但是使用ApiVersion
包含下划线的属性的显式路由会导致异常。例如,这很好用:
[ApiVersion("1")]
但是,这会引发异常:
[ApiVersion("1_0")] // < note '_0' here
[RoutePrefix("api/{version:apiVersion}/account")]
public class AccountController : ApiBaseController
{
// actions...
}
例外是:
FormatException:指定的 API 版本状态“_1”无效。
System.InvalidOperationException:“无法比较数组中的两个元素。”
在 System.Collections.Generic.ArraySortHelper`1.Sort(T[] 键,Int32 索引,Int32 长度,IComparer`1 比较器)
在 System.Array.Sort[T](T[] 数组,Int32 索引,Int32 长度, IComparer`1 比较器)
在 System.Collections.Generic.List`1.Sort(Int32 索引,Int32 计数,IComparer`1 比较器)
在 Microsoft.Web.Http.Dispatcher.ApiVersionControllerSelector.InitializeControllerInfoCache()
在 System.Lazy`1。 CreateValue()
在 System.Lazy`1.LazyInitValue()
在 System.Lazy`1.get_Value()
在 Microsoft.Web.Http.Dispatcher.ApiVersionControllerSelector.GetControllerMapping()
在 System.Web.Http.Routing.AttributeRoutingMapper.AddRouteEntries(SubRouteCollection 收集器,HttpConfiguration 配置,IInlineConstraintResolver constraintResolver,IDirectRouteProvider directRouteProvider)
在 System.Web.Http.Routing.AttributeRoutingMapper。 <>c__DisplayClass1_1.b__1()
在 System.Web.Http.Routing.RouteCollectionRoute.EnsureInitialized(Func`1 初始化程序)
在 System.Web.Http.Routing.AttributeRoutingMapper.<>c__DisplayClass1_0.b__0(HttpConfiguration config)
在 System.Web。
E:\ProjectPath\Foo.cs:line 25 中 ProjectName.Startup.Configuration(IAppBuilder app) 处的Http.HttpConfiguration.EnsureInitialized()
问题很明显,但是如何在版本属性值中包含下划线?问题令人困惑,因为我假设类的内部(在某些时候)将值解析为整数,但属性本身接受字符串......?那为什么会这样呢?