我有一个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