在更新 Asp.Net WebApi 5.2.2 到 5.2.7 后捕获所有不工作的路由
Catch all routes not working after update Asp.Net WebApi 5.2.2 to 5.2.7
考虑以下路线
HttpConfiguration config = new HttpConfiguration();
config.Routes.MapHttpRoute(
"myApi",
baseRoute + "myApi/file/{param1}/{*param2}",
new {controller = "File"}
);
这个包罗万象的路由触发了 FileController
[HttpGet]
public object Get(string param1, string param2)
{
//...
}
对于 WebApi 5.2.2,控制器是通过 url 触发的
第二种情况导致 param2 = "b/c/d/e" 这就是这个包罗万象的路由的工作原理(至少对于版本 5.2.2)。
现在的问题是,对于版本 5.2.7,第二种情况不再有效。我在 release notes 中看不到任何相关内容。有人知道问题出在哪里吗?
编辑
我在问题中概括了很多问题。我有问题
点字符似乎导致了问题。
我的解决方案如下。我不得不添加一个额外的无扩展 url 处理程序。
因此
<add name="ExtensionlessUrlHandler-Integrated-4.0_1a" path="*" verb="*" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
我需要
<add name="ExtensionlessUrlHandler-Integrated-4.0_1a" path="*.*" verb="*" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
考虑以下路线
HttpConfiguration config = new HttpConfiguration();
config.Routes.MapHttpRoute(
"myApi",
baseRoute + "myApi/file/{param1}/{*param2}",
new {controller = "File"}
);
这个包罗万象的路由触发了 FileController
[HttpGet]
public object Get(string param1, string param2)
{
//...
}
对于 WebApi 5.2.2,控制器是通过 url 触发的
第二种情况导致 param2 = "b/c/d/e" 这就是这个包罗万象的路由的工作原理(至少对于版本 5.2.2)。
现在的问题是,对于版本 5.2.7,第二种情况不再有效。我在 release notes 中看不到任何相关内容。有人知道问题出在哪里吗?
编辑
我在问题中概括了很多问题。我有问题
点字符似乎导致了问题。
我的解决方案如下。我不得不添加一个额外的无扩展 url 处理程序。
因此
<add name="ExtensionlessUrlHandler-Integrated-4.0_1a" path="*" verb="*" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
我需要
<add name="ExtensionlessUrlHandler-Integrated-4.0_1a" path="*.*" verb="*" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />