不同的RoutePrefix,相同的控制器名称
我在使用命名空间和RoutePrefix将我的web-api应用程序拆分到不同的区域(而不是mvc区域)时遇到问题
该应用程序使用Owin Self Host托管,在我的Startup类中,我有以下内容。
HttpConfiguration config = new HttpConfiguration(); config.MapHttpAttributeRoutes(); app.UseWebApi(config);
我测试过的两个控制器
[RoutePrefix("api/test")] public class TestController : ApiController { [Route("")] public IHttpActionResult Get() { return Ok("api"); } }
[RoutePrefix("sync/test")] public class TestController : ApiController { [Route("")] public IHttpActionResult Get() { return Ok("sync"); } }
这两个控制器存在两个不同的命名空间,Api和Sync。
当我尝试使用http:// localhost / api / test和http:// localhost / api / sync访问两个控制器时,我得到404。
但是,如果我将其中一个控制器重命名为例如TestApiController,那么两者都可以工作。
如果有可能做我想做的事,有人会有好主意吗?
不幸的是,Web API按类名查找控制器,忽略命名空间。 这是一个已知问题,并非基于属性的路由所独有。
迄今为止最简单的解决方法是避免问题并使用唯一的控制器名称。 但是,如果你不介意有点想象,这是一个解决方案: