不同的RoutePrefix,相同的控制器名称

Jen*_*akk 16 c# asp.net-web-api-routing asp.net-web-api2

我在使用命名空间和RoutePrefix将我的web-api应用程序拆分到不同的区域(而不是mvc区域)时遇到问题

该应用程序使用Owin Self Host托管,在我的Startup类中,我有以下内容.

HttpConfiguration config = new HttpConfiguration();
config.MapHttpAttributeRoutes();
app.UseWebApi(config);
Run Code Online (Sandbox Code Playgroud)

我测试过的两个控制器

[RoutePrefix("api/test")]
public class TestController : ApiController
{
    [Route("")]
    public IHttpActionResult Get()
    {
        return Ok("api");
    }
}
Run Code Online (Sandbox Code Playgroud)
[RoutePrefix("sync/test")]
public class TestController : ApiController
{
    [Route("")]
    public IHttpActionResult Get()
    {
        return Ok("sync");
    }
}
Run Code Online (Sandbox Code Playgroud)

这两个控制器存在两个不同的命名空间,Api和Sync.

当我尝试使用http:// localhost/api/testhttp:// localhost/api/sync访问两个控制器时, 我得到404.

但是,如果我将其中一个控制器重命名为例如TestApiController,那么两者都有效.

如果有可能做我想做的事,有人会有个好主意吗?

Tod*_*ier 18

遗憾的是,Web API按类名查找控制器,忽略命名空间.这是一个已知问题,并非基于属性的路由所独有.

迄今为止最简单的解决方法是避免问题并使用唯一的控制器名称.但如果你不介意有点花哨,这是一个解决方案:

https://blogs.msdn.microsoft.com/webdev/2013/03/07/asp-net-web-api-using-namespaces-to-version-web-apis/