我有一条看起来像这样的路线:
/foo/{identifier}/bar/
我已经配置了这样的路线:
httpConfiguration.Routes.MapHttpRoute("Foo1", "foo/{identifier}/bar/", new
{
controller = "Foo",
action = nameof(Foo.Bar)
});
我还配置了第二条路由,它路由到同一个控制器但方法不同:
httpConfiguration.Routes.MapHttpRoute("Foo2", "foo/{*identifier}", new
{
controller = "Foo",
identifier = RouteParameter.Optional
});
我的控制器看起来像这样:
[HttpPost]
[ScopeAuthorize(SomeScope)]
public HttpResponseMessage Bar(string identifier, [FromBody] SomeDto dto)
{
Console.WriteLine(identifier);
}
如果我使用参数
identifier = hello
和正文中的一些正确数据向该路由发送 POST 请求,我希望 identifier
的值是 hello
。然而,价值是hello/bar
。我在这里错过了什么?
问题出在第二条路线中的 catch-all 参数。当我删除它时,路由按预期工作。
所以,路线
foo/{*identifier}
变成了foo/{identifier}
.