2012-03-15 117 views
0

我有一個ASP.NET MVC看似奇怪的問題。ASP.NET MVC路由到內聯網頁面

我們爲Customer X建立了一個網站,並將它部署在他們的服務器上。第一個問題是,它是一個新的Access Manager之後,以便於所有的請求都要經過:

https://portal.customerx.com/intranet/tool/ {並在這裏開始我的MVC路線}

出於這個原因,我成立了Globol.asax是這樣的:

routes.MapRoute(
      "SubfolderZielsetzung", // Route name 
      "intranet/tool" + "{controller}/{action}/{objectOneId}", // URL with parameters 
      new { controller = "Home", action = "Index", objectOneId = "objectOneId" } // Parameter defaults 
     ); 

現在的要求是,我在首頁上的超鏈接添加到一個靜態的網站,該網站是在他們的內網:

https://portal.customerx.com/asdf/foo/bar/1337/test-1

如果我只需添加到主頁下面的HTML標籤:

<a href="https://portal.customerx.com/asdf/foo/bar/1337/test-1">Support</a> 

所以,現在來了奇怪的事情。這是會得到來自引擎進行渲染:

<a href="https://portal.customerx.com/intranet/tool/asdf/foo/bar/1337/test-1"> 

出於某種原因,我不能明白爲什麼,路由引擎改變了,即使我不使用任何HTML輔助我的超級鏈接,並設置URL前綴答案後「https://portal.customerx.com/

編輯

我昨天寫,我已經找到了答案,但事實證明,要麼是沒有答案的。

我已經把以下的路徑,在全球ASAX的頂部,暗示從這個articlte: Asp.net MVC and redirect to External site

routes.MapRoute(
      "RedirectSiteRoute", 
      "{site}", 
      new { }, 
      new { site = new SiteRouteConstraint() } 
     ); 

和:

public class SiteRouteConstraint : IRouteConstraint 
{ 
    public bool Match(System.Web.HttpContextBase httpContext, Route route, string parameterName, RouteValueDictionary values, RouteDirection routeDirection) 
    { 

    string[] allowedSites = new[] { "https://portal.customerx.com/intranet/tool/asdf/foo/bar/1337/test-1" }; 
    return allowedSites.Any(x => x == values[parameterName].ToString()); 

    } 
} 

然後,我感動了所有的路線與URL前綴到全局asax的底部,所以現在我所有沒有URL_Prefix的路由都位於頂部。

這是怎麼看起來像:

public static void RegisterRoutes(RouteCollection routes) 
    { 
     routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 


     routes.MapRoute(
      "RedirectSiteRoute", 
      "{site}", 
      new { }, 
      new { site = new SiteRouteConstraint() } 
     ); 

     routes.MapRoute(
      "Grundauftrag", // Route name 
      "{controller}/{action}/{objectOneId}/{objectTwoId}/{objectThreeId}", // URL with parameters 
      new { controller = "Home", action = "Index", objectOneId = "objectOneId", objectTwoId = "objectTwoId", objectThreeId = "objectThreeId" } // Parameter defaults 
     ); 

     routes.MapRoute(
      "Zielsetzung", // Route name 
      "{controller}/{action}/{objectOneId}/{objectTwoId}", // URL with parameters 
      new { controller = "Home", action = "Index", objectOneId = "objectOneId", objectTwoId = "objectTwoId" } // Parameter defaults 
     ); 

     routes.MapRoute(
      "Default", // Route name 
      "{controller}/{action}/{objectOneId}", // URL with parameters 
      new { controller = "Home", action = "Index", objectOneId = "objectOneId" } // Parameter defaults 
     ); 

     routes.MapRoute(
      "SubfolderGrundauftrag", // Route name 
      Const.URL_PREFIX + "{controller}/{action}/{objectOneId}/{objectTwoId}/{objectThreeId}", // URL with parameters 
      new { controller = "Home", action = "Index", objectOneId = "objectOneId", objectTwoId = "objectTwoId", objectThreeId = "objectThreeId" } // Parameter defaults 
     ); 

     routes.MapRoute(
      "SubfolderZielsetzung", // Route name 
      Const.URL_PREFIX + "{controller}/{action}/{objectOneId}/{objectTwoId}", // URL with parameters 
      new { controller = "Home", action = "Index", objectOneId = "objectOneId", objectTwoId = "objectTwoId" } // Parameter defaults 
     ); 

     routes.MapRoute(
      "Subfolder", // Route name 
      Const.URL_PREFIX + "{controller}/{action}/{objectOneId}", // URL with parameters 
      new { controller = "Home", action = "Index", objectOneId = "objectOneId" } // Parameter defaults 
     ); 

    } 

有了,客戶平臺上的靜態鏈接的罰款。但現在我的網頁中的所有其他鏈接不再工作了...

我不得不把路線與URL_Prefix回到頂端,它再次工作,但現在當然靜態鏈接不再工作。

任何想法?

+0

https://portal.customerx.com/intranet/tool/asdf/foo/bar/1337/test-1 - 這個結果的視圖代碼是什麼 – 2012-03-15 14:37:45

+0

我希望我的理解正確,在我的_Layout.cshtml頁面我有以下行: Support AlCaponi 2012-03-15 14:51:13

+0

Unfortunalty不能測試你的問題,但我開始明白什麼是問題。簡單的解決方法是將iis重寫規則放在特定的url中。無論如何,我只是不明白你如何獲得更改網址靜態href – 2012-03-16 10:50:06

回答

0

添加https://開頭,否則IIS查找從根foler這個資源加時賽網站

+0

也試過,也沒有幫助。不管怎麼說,還是要謝謝你! – AlCaponi 2012-03-15 15:14:12

+0

@AlCaponi你總是可以編輯你的問題在最後添加解決方案 – Chao 2012-03-15 15:37:06

+0

我編輯了我的問題,但我還沒有找到解決方案 – AlCaponi 2012-03-16 10:24:09

0

我有,我需要以不同的方式接收和發送的路由上綁定類似的問題。

我這樣做是通過先輸入我的傳入綁定(因爲你不能強制傳入的特定路由)。對於傳出鏈接,我使用Html.RouteLink,並且我可以指定我想要使用哪條路線,而不管它的位置。