当前位置 : 主页 > 网络编程 > ASP >

asp.net-mvc-3 – 使用AppHarbor处理URL而不修改所有我的控制器

来源:互联网 收集:自由互联 发布时间:2021-06-24
我正在尝试在AppHarbor上托管一个MVC 3应用程序(FunnelWeb).由于我仍然不清楚的原因,当我的路线只是一个控制器动作(例如,mysite / admin是管理员索引,mysite /登录是管理员登录)一切正常,但如果
我正在尝试在AppHarbor上托管一个MVC 3应用程序(FunnelWeb).由于我仍然不清楚的原因,当我的路线只是一个控制器动作(例如,mysite / admin是管理员索引,mysite /登录是管理员登录)一切正常,但如果我在路线中有其他任何东西(例如变量如{* page})我的URL将是mysite:12345 / mypage(其中12345是AppHarbor分配的端口号,mypage是我正在请求的页面的名称).这使得请求失败,因为端口12345未公开.

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个.
网友评论