不同的 RoutePrefix,相同的控制器名称
Different RoutePrefix, same controller name
我在使用命名空间和 RoutePrefix
将我的 web-api 应用程序拆分到不同的区域(不是 mvc 区域)时遇到问题
该应用程序使用 Owin Self Host 托管,在我的 Startup class 我有以下内容。
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 and http://localhost/api/sync 我收到 404。
但是如果我将其中一个控制器重命名为例如测试ApiController然后两者都工作。
有人有好主意是否可以做我想做的事?
不幸的是,Web API 通过 class 名称查找控制器,忽略命名空间。这是一个已知问题,并非基于属性的路由所独有。
目前最简单的解决方法是避免该问题并使用唯一的控制器名称。但如果你不介意有点花哨,这里有一个解决方案:
我在使用命名空间和 RoutePrefix
将我的 web-api 应用程序拆分到不同的区域(不是 mvc 区域)时遇到问题该应用程序使用 Owin Self Host 托管,在我的 Startup class 我有以下内容。
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 and http://localhost/api/sync 我收到 404。
但是如果我将其中一个控制器重命名为例如测试ApiController然后两者都工作。
有人有好主意是否可以做我想做的事?
不幸的是,Web API 通过 class 名称查找控制器,忽略命名空间。这是一个已知问题,并非基于属性的路由所独有。
目前最简单的解决方法是避免该问题并使用唯一的控制器名称。但如果你不介意有点花哨,这里有一个解决方案: