2013-03-19 2 views
2

Внутри моего каталога Controllers У меня есть два подкаталогов - FeaturesA и FeaturesBWeb Api маршрут фильтр подкаталога

FeaturesA 
     Service1Controller 
     Service2Controller 
     Service3Controller 

FeaturesB 
     Service4Controller 
     Service5Controller 
     Service6Controller 

Я хочу добавить два маршрута, так что я могу получить доступ к этим услугам по следующим адресам -

localhost/api/FeaturesA/.... 

и

localhost/api/FeaturesB/.... 

Я follwing установки маршрута

public static class WebApiConfig 
{ 
    public static void Register(HttpConfiguration config) 
    { 

     config.Routes.MapHttpRoute(
      name: "FeaturesA", 
      routeTemplate: "api/FeaturesA/{controller}/{id}", 
      defaults: new { id = RouteParameter.Optional}); 

     config.Routes.MapHttpRoute(
      name: "FeaturesB", 
      routeTemplate: "api/FeaturesB/{controller}/{id}", 
      defaults: new { id = RouteParameter.Optional}); 

НО я могу получить доступ Service1 от localhost/api/FeaturesA/Service1 и localhost/api/FeaturesB/Service1 и даже localhost/api/Service1

Как настроить мои маршруты только позволит Service1 к доступ из localhost/api/FeaturesA/Service1, то же самое относится и ко всем остальным контроллерам, то есть они должны только быть доступным из URL-адреса, который соответствует их контроллеру.

+0

был еще один ответ на этот вопрос, который имел очень полезную информацию, может вкладчик пожалуйста перепечатывать этот ответ. – tom

ответ

3

Это похоже на то, что именно было сделано для того, чтобы сделать routing constraints. Если у вас достаточно простой случай, вы можете использовать встроенные типы, чтобы просто добавлять регулярные выражения в соответствие с именами контроллеров. Но для более сложных случаев вы можете написать свой собственный.

Pinal Бхатт имеет хороший пост блога со ссылками на кучу статей на эту тему здесь: http://blog.pbdesk.com/2012/07/route-constraints-with-aspnet-mvc.html

+0

Спасибо, добавив, что это маршрут делает то, что я хочу - ограничения: new {controller = "service1 | service2 | service3"} – tom

Смежные вопросы