Различное 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/