我在使用命名空间和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都可以工作。
如果有可能做我想做的事,有人会有个好主意吗?
答案 0 :(得分:18)
不幸的是,Web API按类名查找控制器,忽略了命名空间。这是一个已知问题,并非基于属性的路由所独有。
迄今为止最简单的解决方法是避免问题并使用唯一的控制器名称。但如果你不介意有点想象,那么这就是一个解决方案: