2014-09-28 45 views
0

我在我的MVC應用程序了以下路線:複雜的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篩選器,遺憾的是沒有任何的建議,上述問題迎刃而解。 – 2014-09-29 12:33:06