在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
自从微软发布 ASP.NET MVC 和routing engine (System.Web.Routing)以来,就设法让我们明白你完全能控制URL和routing,只要与你的application path相结合进行扩展,任何问题都迎刃而解。如果你需要在所处的域或者子域处理数据标记的话,强制使用Default。 遗憾的是,ASP.NET MVC是基于虚拟目录的,在实际项目却有各种各样的需求方案。 例如: 1:应用程序是多语言的,像cn.example.com应该被匹配到“www.{language}example.com”路由上。 2:应用程序是多用户的,像username.example.com应该被匹配到“www.{clientname}.example.com”路由上。 3:应用程序是多子域的,像mobile.example.com应该被匹配到"www.{controller}.example.com/{action}....” 。 坐下来,深呼吸,开始我们ASP.NET MVC的神奇之旅吧。 定义routes
下面是我们定义简单的route,不带任何controller控制的route:
));
另一个例子是用我们的controller控制域名:
));
打算用controller 和action完全控制域名?
));
接下来是多语言route:
));
因为我们不希望所有的URL所产生HtmlHelper ActionLink要使用full URLs,第一件事我们会添加一些新的ActionLink,其中载有boolean flag是否要full URLs或没有。利用这些,现在您可以添加一个链接到一个Action如下:
<%= Html.ActionLink("About", "About", "Home", true)%>
跟你以往的习惯没有什么不同,不是吗?
DomainRoute domainRoute = routeData.Route as DomainRoute; if (domainRoute != null) { DomainData domainData = domainRoute.GetDomainData(new RequestContext(currentContext, routeData), routeData.Values); return htmlHelper.ActionLink(linkText, actionName, controllerName, domainData.Protocol, domainData.HostName, domainData.Fragment, routeData.Values, null); } } return htmlHelper.ActionLink(linkText, actionName, controllerName, routeValues, htmlAttributes); } } 在这没什么特别的:有许多的扩展方法,把扩展的URL加到域名上。这是一个预设ActionLink helpers,我的精神食粮来了DomainRoute class(详见:Dark Magic) Dark magic瞥眼之间,您可能已经看到了我的DomainRoute类代码段。这个类实际上是提取子域,并增加了象征性支持域部分的传入的URL, 我们将扩展基类,它已经给了我们一些属性和方法,但是我们得重写他们!
}
|
请发表评论