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

2024-01-15

我在使用命名空间和 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/测试 http://localhost/api/test and http://localhost/api/sync http://localhost/api/sync我得到了 404。

但是如果我将其中一个控制器重命名为例如TestApiController 然后两者都可以工作。

有人有好主意是否可以做我想做的事?


不幸的是,Web API 通过类名查找控制器,而忽略名称空间。这是一个已知问题,并不是基于属性的路由所独有的。

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

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

不同的RoutePrefix,相同的控制器名称 的相关文章

随机推荐