如何处理MVC路由中代理服务器创建的虚拟路径?

时间:2016-08-03 09:55:31

标签: c# asp.net-mvc asp.net-mvc-4 reverse-proxy

我对MVC很新。最近我开发了一个站点并将其托管在代理服务器后面。我使用internalhostname / site / {controller} / {action} / {id}访问我的网站进行测试,效果很好。 但是,当我的用户连接网站时,他们会使用如下外部网址:externalhostname / apps / site / {controller} / {action} / {id}。现在,当我的视图尝试根据默认路由配置启动对控制器的调用时,生成的URL将变为externalhostname / site / {controller} / {action} / {id},notice" / apps"离开了。

嗯,这对我来说是一个众所周知的问题。因为在创建URL时,主机名不包含" / apps"。在常规ASP.NET页面中创建的其他站点中,我只是劫持URL创建并用主机/应用程序替换主机,这可以解决问题。但我不知道如何在MVC世界中做到这一点。

此外,我正在使用Telerik控件(对于MVC),它还通过控制器和操作发起请求,最终导致错误的URL。

路由配置是默认的。我确实尝试更改规则但所有这些只影响后面的url格式。没有什么可以让我改变它前面的行为。 我已经挣扎了几天,无法找到出路。感谢一些建议。谢谢。

我无法更改代理规则。这不是我的选择。

环境:MVC 4,IIS 7.0,如果这些问题。

1 个答案:

答案 0 :(得分:0)

尝试在路线配置中添加新条目。

routes.MapRoute(
    "Default2", // Route name
    "apps/{controller}/{action}/{id}", // URL with parameters
    new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults,
);

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

记下订单。