我有一个位于服务器1上的ASP.NET MVC 3 Web应用程序:
我有一个小部件(也是ASP.NET MVC 3 Web应用程序),它位于服务器2上:
现在,我想从我的小部件生成一个指向主网站的链接。
所以,如果我在小部件项目中做了类似的事情:
@Html.RouteLink("Outbound link", "MainWebsiteRoute", "http", "http://www.mysite.com", string.Empty, null)
它会出错(或生成错误的链接),因为小部件和网站项目之间的路由表不同。
即使我将路线从主网站复制到窗口小部件中,窗口小部件项目中也不存在控制器/操作,因此它不起作用。
我该怎么做?我是否需要对网址进行硬编码?
答案 0 :(得分:1)
结束在小部件中复制我需要的主网站的路线。
主网站中的示例路线:
context.MapRoute(
"Q&A - Individual Q",
"{locationUniqueUri}/questions/{questionUniqueUri}",
new { controller = "Questions", action = "Detail" },
);
小部件中的Duped路径:
RouteTable.Routes.MapRoute(
"Outbound - Q&A - Individual Q",
"{locationUniqueUri}/questions/{questionUniqueUri}"
);
注意没有路由默认值 - 这是因为我不关心,因为那是关于将路由匹配到控制器/动作。但这发生在网站上,而不是小部件。我所关心的只是生成网址。
然后我为RouteLink
创建了一个名为OutboundRouteLink
的简单包装器,它指定了主机名(主网站),并生成链接。
我认为这不是太坏的解决方案。显然,它在某种程度上是硬编码的 - 如果主网站中的路线发生变化,那么我将不得不改变小部件路线。但那很好,因为如果我的一个URL改变了,我还是要做301,所以旧的URL仍然适用于小部件(他们会得到301)。
此外,我可以更进一步,将路径网址存储在配置文件中,并在项目之间共享,这样可以让我更安全。但是只有大约3个出站URL,所以这应该没问题。
不是说这是处理它的最佳方式,但我很满意。
答案 1 :(得分:0)
你在使用区域吗?如果没有,那么也许你应该。这样你就可以简单地为路线提供区域,并且能够为你解析网址。根据您的示例网址,您可以将您的小部件网站作为一个区域来构建主站点。为路径值中的area参数提供空字符串将允许您从窗口小部件站点引用主站点中的控制器/操作。