Различное RoutePrefix, такое же имя контроллера

У меня возникла проблема с разделением моего приложения web-api на разные области (не mvc-области), с использованием пространств имен и RoutePrefix

Приложение размещено с использованием автономного хоста Owin, а в моем классе 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 работает.

У кого-то есть хорошая идея, если это возможно сделать то, что я хочу?

Ответы

Ответ 1

К сожалению, Web API находит контроллеры по имени класса, игнорируя пространство имен. Это известная проблема и не уникальна для маршрутизации на основе атрибутов.

Простейшим решением проблемы является устранение проблемы и использование уникальных имен контроллеров. Но если вы не возражаете получить немного фантазии, вот решение:

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