2012-03-15 139 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,并且我可以指定我想要使用哪条路线,而不管它的位置。