ASP.. NET子域url重写和url生成



是否有办法为区域使用子域?. NET MVC真的有用吗?

我看到了许多不同的方法,但没有一个是完全与ASP一起工作的。. NET MVC基础架构:

a)使用routeconstrent(像MVC 3子域路由)-它帮助asp.net MVC选择正确的路由,但不能解决url生成问题

b)定义自定义路由类:http://blog.tonywilliams.me.uk/asp-net-mvc-2-routing-subdomains-to-areas或http://blog.maartenballiauw.be/post/2009/05/20/ASPNET-MVC-Domain-Routing.aspx,两者都有问题的url生成(第二个提供HtmlHelper。ActioLink扩展作为解决方案,但这只是需要的一小部分- url是使用Html构建的。BeginForm, Ajax。BeginForm, Url。动作,等等-太多的变化,现有的代码库+没有人会保证,新手不会忘记使用正确的扩展+不确定这是否会与T4MVC工作)。

c)使用url重写规则:
 <rules>
    <rule name="SubDomain" stopProcessing="false">
      <match url="(.*)" />
      <conditions>
        <add input="{HTTP_HOST}" pattern="^(?!www)(w+).domain.com$" />
      </conditions>
      <action type="Rewrite" url="{C:1}/{R:1}" />
    </rule>
  </rules>

所以如果用户请求admin.domain.com, asp.net mvc理解domain.com/admin。到目前为止一切顺利,问题是这个(我实际上使用的是T4MVC,但这里是没有它的例子,不要吓唬那些,谁从未使用过它):

<a href="@Url.Action("Index", "Home")">

这个,根据我的路由应该去domain.com,但它给出了异常"不能使用前导…

我猜它是这样的,因为UrlAction试图使用当前url(重写后为domain.com/admin)构建url,这会导致失败。另外,我认为这只是一种方法-只是为了找到正确的区域/控制器/动作,而不是为了生成正确的url。

所以问题是,有没有人做这两种方式(我的意思是路由到右区域/控制器/动作和生成url的使用标准助手,如HtmlHelper, UrlHelper)?

首先你需要设置你的DNS。

在global中编写代码。asax低于

 public class SubdomainRoute : Route
{
    public SubdomainRoute(string url, object defaults)
        : base(url, new RouteValueDictionary(defaults), new MvcRouteHandler())
    { }
    public override RouteData GetRouteData(HttpContextBase httpContext)
    {
        var rd = base.GetRouteData(httpContext);
        var tokens = httpContext.Request.Url.Host.Split('.');
        if (tokens.Length > 1)
        {
            rd.Values["username"] = tokens[0];
        }
        return rd;
    }
}

最新更新