2014-09-28 6 views
0

У меня есть следующий маршрут в моем MVC applicaiton:комплекс MVC Маршруты

 routes.MapRoute(
      name: "Default", 
      url: "api/{server}/{port}/{route}", 
      defaults: new { 
       controller = "Home", 
       action = "Index", 
       server = UrlParameter.Optional, 
       port = UrlParameter.Optional, 
       route = UrlParameter.Optional } 
     ); 

Этот маршрут получает удар, когда URL является http://localhost:80/api/myserver.mydomain.net/8080/mypage, но когда я изменить URL, чтобы http://localhost:80/api/myserver.mydomain.svc/8080/mypage маршрут вдруг не попасть. Любая идея, почему просто изменение аргумента в моем маршруте от «.net» до «.svc» перестало бы работать?

ответ

2

Я нашел ответ на свой вопрос here. Все, что я должен был сделать удалить SVC-поставщика сборки с моего сайта:

<system.web> 
    <compilation debug="true" targetFramework="4.0"> 
     <buildProviders> 
     <remove extension=".svc"/>    
     </buildProviders> 
    ... 
1

.svc - это расширение пути для конечных точек WCF, поэтому IIS будет обрабатывать это через другой механизм (модуль/обработчик ISAPI), а не через механизм маршрута MVC/WebAPI.

Попробуйте добавить к вашему web.config следующее: оно заставляет IIS запускать механизм маршрутизации с каждым запросом.

<configuration> 
    <system.webServer> 
     <modules runAllManagedModulesForAllRequests="true" /> 
    ..... 

Примечание: это может привести к излишним накладным расходам на запросы на страницу.

Другим вариантом может быть удаление самого модуля, но это повлияет на любые конечные точки WCF, которые вы можете запустить.

<configuration> 
    <system.webServer> 
     <modules> 
      <remove name="ServiceModel-4.0" /> 
    ..... 
+0

Я думаю, что вы могли бы быть на что-то с ISAPI фильтров, к сожалению, ни один из предложений выше не решило проблему. –

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