【发布时间】:2016-10-31 16:53:36
【问题描述】:
我创建了三个带有RoutePrefix 属性的WebAPI 控制器。有一个共享部分的路线如下图所示:
[RoutePrefix("api/foo/users")
public class ControllerOne : ApiController
{
...
}
[RoutePrefix("api/foo/users/books")
public class ControllerTwo : ApiController
{
...
}
[RoutePrefix("api/foo/users/movies")
public class ControllerThree : ApiController
{
[HttpGet]
[Route("")]
public void Foo(){}
}
当我调用 Foo 方法(使用地址 .../api/foo/users/movies/)时,我得到以下异常:
找到多个与 URL 匹配的控制器类型。这个可以 如果多个控制器上的属性路由与请求的匹配,则会发生 网址。该请求找到了以下匹配的控制器类型: ...例外。
RoutePrefix 属性子字符串是否敏感?
【问题讨论】:
-
为什么多次使用同一个控制器名称?
-
@CodeNotFound 对不起,我在这里犯了三个控制器错误。
-
你必须小心路由和参数。例如,如果您的路由
api/foo/users需要一个字符串作为参数,那么api/foo/users、api/foo/users/movies和api/foo/users/books都将是对api/foo/users/parameter的有效调用,并且web api 将不知道他将发送到哪个路由您的要求 -
可以为每个控制器添加动作吗?我认为 ControllerOne 中的某些操作与其他控制器中的某些操作相匹配。
-
ControllerOne中的动作匹配“电影”路由。
标签: c# rest asp.net-web-api