ASP MVC路由在子域中的工作方式不同

时间:2011-09-13 23:26:50

标签: asp.net-mvc asp.net-mvc-routing subdomain

我有一个托管在亚马逊服务器上的应用程序,它有两个实例,一个用于测试,一个用于生产。


在服务器123.456.789.123上,应用程序实例为
  - wwwroot / myappuat
  - wwwroot / myappprod

所以子域myapp.mydomain.com DNS设置指向服务器123.456.789.123
并且已经为这些实例设置了重写规则,让我们看一下生产

<rule name="myapp.mydomain.com" stopProcessing="true">
<match url=".*" />
<conditions>
    <add input="{HTTP_HOST}" pattern="^myapp.mydomain.com$" />
</conditions>
<action type="Rewrite" url="\myappprod\{R:0}" />
</rule>

问题在于RedirectToAction的行为与我在开发中测试localhost时的行为方式不同。

例如:

RedirectToAction("Login", "Home")

将重定向到http://myapp.mydomain.com/myappprod/Home/Login而不是预期的http://myapp.mydomain.com/Home/Login

我怀疑我需要修改RegisterRoutes中的路由设置。但我不知道该怎么做。

对此的任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:1)

我发现我哪里出错了。

蒂尔达的。

例如,从URL授权到登录页面的重定向如下所示:

<authentication mode="Forms">
  <forms loginUrl="~/Home/Login" timeout="2880" />
</authentication>

由于URL已被重写,路径仍包含/ myappprod。 删除tilda修复它

<authentication mode="Forms">
  <forms loginUrl="/Home/Login" timeout="2880" />
</authentication>

我在这儿的时候还有一件事。确保使用Url.Content("~/url/here")而不仅仅是"~/url/here"。特别是那些tildas。

答案 1 :(得分:0)

尝试将前缀放在global.asax

中的RegisterRoutes方法中

e.g。

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