以版本号作为参数的 WebAPI AttributeRouting
WebAPI AttributeRouting with version number as parameter
我正在尝试使用以下模板设置到我的 MVC 控制器操作的路由:
[Route("app/{appId:length(20)}/validate/{version}")]
想法是结果 URL 看起来像这样:
(我正在添加 space 以使本地主机 url 尝试不解析...)
http:/ /localhost:2642/api/update/v1/app/6A6EE0B355C34DBFB381/validate/1.0.0.0
我遇到的问题是这会给我一个 404 错误。
如果我删除 Route 属性并使用内置的 MVC 路由,它就可以工作。 url 则为:
http:/ /localhost:2642/api/external/CheckForUpdate?appId=6A6EE0B355C34DBFB381&version=1.0.0.0
这应该可行,因为我知道 Nuget 在他们的 URL 中有版本,但我认为他们使用内置的 MVC 路由器。
我还尝试在路由模板中添加 :regex() 标记以验证字符串格式,但这没有用。如果我传入普通字符串或 1_0_0_0 之类的值,它就可以工作。事情是我不想在将版本字符串发送到 api 然后在 api 本身之前努力操纵版本字符串。
对我做错了什么有什么想法吗?
如果你让你的路由属性
[Route("app/{appId:length(20)}/validate/{version:regex(^([1-9]\d+|[0-7])(\.\d{1,3}){0,3}$)}")]
并确保您接受方法中的参数
public Task<IHttpActionResult> Get(string appId, string version)
{
//magic
}
然后在 web.config、system.webServer > 处理程序部分将 *.
更改为 *
<add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="*" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
到
<add name="ExtensionlessUrlHandler-Integrated-4.0" path="*" verb="*" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
并确保
<modules runAllManagedModulesForAllRequests="true">
存在于<system.webServer>
我正在尝试使用以下模板设置到我的 MVC 控制器操作的路由:
[Route("app/{appId:length(20)}/validate/{version}")]
想法是结果 URL 看起来像这样: (我正在添加 space 以使本地主机 url 尝试不解析...)
http:/ /localhost:2642/api/update/v1/app/6A6EE0B355C34DBFB381/validate/1.0.0.0
我遇到的问题是这会给我一个 404 错误。
如果我删除 Route 属性并使用内置的 MVC 路由,它就可以工作。 url 则为:
http:/ /localhost:2642/api/external/CheckForUpdate?appId=6A6EE0B355C34DBFB381&version=1.0.0.0
这应该可行,因为我知道 Nuget 在他们的 URL 中有版本,但我认为他们使用内置的 MVC 路由器。
我还尝试在路由模板中添加 :regex() 标记以验证字符串格式,但这没有用。如果我传入普通字符串或 1_0_0_0 之类的值,它就可以工作。事情是我不想在将版本字符串发送到 api 然后在 api 本身之前努力操纵版本字符串。
对我做错了什么有什么想法吗?
如果你让你的路由属性
[Route("app/{appId:length(20)}/validate/{version:regex(^([1-9]\d+|[0-7])(\.\d{1,3}){0,3}$)}")]
并确保您接受方法中的参数
public Task<IHttpActionResult> Get(string appId, string version)
{
//magic
}
然后在 web.config、system.webServer > 处理程序部分将 *.
更改为 *
<add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="*" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
到
<add name="ExtensionlessUrlHandler-Integrated-4.0" path="*" verb="*" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
并确保
<modules runAllManagedModulesForAllRequests="true">
存在于<system.webServer>