我有一個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回到頂端,它再次工作,但現在當然靜態鏈接不再工作。
任何想法?
https://portal.customerx.com/intranet/tool/asdf/foo/bar/1337/test-1 - 這個結果的視圖代碼是什麼 – 2012-03-15 14:37:45
我希望我的理解正確,在我的_Layout.cshtml頁面我有以下行: Support – AlCaponi 2012-03-15 14:51:13
Unfortunalty不能測試你的問題,但我開始明白什麼是問題。簡單的解決方法是將iis重寫規則放在特定的url中。無論如何,我只是不明白你如何獲得更改網址靜態href – 2012-03-16 10:50:06