我正在尝试在AppHarbor上托管一个MVC 3应用程序(FunnelWeb).由于我仍然不清楚的原因,当我的路线只是一个控制器动作(例如,mysite / admin是管理员索引,mysite /登录是管理员登录)一切正常,但如果
AppHarbor使用load balancing在多个IIS之间分发请求.这是他们做事的方式,这就是内部请求被路由到一些非标准端口的原因.我没有问题,但我有一个问题,MVC尝试将我路由到该内部URL.
我不指责这里;这是没有人的错:)所以让我们转到这个问题:
>为什么请求仅具有Controller Action的路由和请求具有{* page}之类的变量的路由之间存在差异?请技术请:)
> Here是如何处理AppHarbor中的请求的示例,但是,它似乎需要我修改我的所有控制器(OMG).有没有办法在不修改我的控制器的情况下实现这个?
>欢迎任何其他建议:)
提前致谢.
更新:巧合的是,我观察到的行为符合我达成的结论.但是,该问题与ASP.Net MVC路由无关.简而言之,FunnelWeb强制使用小写URL,因此,每当收到对资源的请求时,如果需要,它会将其转换为小写,并发出301响应.问题是,在为301响应创建URL时,请求URL(绝对URL)现在是从负载均衡器向IIS发出请求时使用的URL,而不是从客户端发出的URL;因此,请求失败.
这是AppHarbor上FunnelWeb网址生成的已知问题.使用标准MVC方法生成相对URL时,这不是问题. AppHarbor在知识库中拥有 short guide and sample on how the generate public URLs个.