Asp.net mvc 在ASP.NETMVC3中使用子域路由生成URL
在ASP.NET MVC中有很多关于子域路由的资料。其中一些使用区域作为子域的目标,另一些使用其他控制器 其中有一些: 它们都解释了如何接受和路由子域请求 但是:Asp.net mvc 在ASP.NETMVC3中使用子域路由生成URL,asp.net-mvc,asp.net-mvc-3,subdomain,asp.net-mvc-routing,Asp.net Mvc,Asp.net Mvc 3,Subdomain,Asp.net Mvc Routing,在ASP.NET MVC中有很多关于子域路由的资料。其中一些使用区域作为子域的目标,另一些使用其他控制器 其中有一些: 它们都解释了如何接受和路由子域请求 但是: 它们都没有解释如何使用子域生成URL。也就是说,我尝试了@Html.RouteLink(“链接到子域”,“子域路由名称”),但它忽略了子域并生成了没有子域的url 如何处理来自不同区域的控制器的相同名称。所有这些解决方案(它们使用名称空间实现这些目的)都会引发存在多个控制器的异常,并建议使用名称空间:) 目的: 使用子域创建站
@Html.RouteLink(“链接到子域”,“子域路由名称”)
,但它忽略了子域并生成了没有子域的urlRouteTable
类根据当前Url获取Route
对象,并将其强制转换为SubdomainRoute
对象
在我的例子中,所有路径都是使用子域名路由定义的,每次我需要添加一个链接到其他页面,我使用我的自定义例程帮助器,这就是为什么我认为这个转换是安全的。有了SubdomainRoute变量,我可以获得子域名,然后使用UriBuilder类构建Url
这是我目前正在使用的代码public static IHtmlString AdvRouteLink(this HtmlHelper htmlHelper, string linkText, string routeName, object routeValues, object htmlAttributes)
{
RouteValueDictionary routeValueDict = new RouteValueDictionary(routeValues);
var request = htmlHelper.ViewContext.RequestContext.HttpContext.Request;
string host = request.IsLocal ? request.Headers["Host"] : request.Url.Host;
if (host.IndexOf(":") >= 0)
host = host.Substring(0, host.IndexOf(":"));
string url = UrlHelper.GenerateUrl(routeName, null, null, routeValueDict, RouteTable.Routes, htmlHelper.ViewContext.RequestContext, false);
var virtualPathData = RouteTable.Routes.GetVirtualPathForArea(htmlHelper.ViewContext.RequestContext, routeName, routeValueDict);
var route = virtualPathData.Route as SubdomainRoute;
string actualSubdomain = SubdomainRoute.GetSubdomain(host);
if (!string.IsNullOrEmpty(actualSubdomain))
host = host.Substring(host.IndexOf(".") + 1);
if (!string.IsNullOrEmpty(route.Subdomain))
host = string.Concat(route.Subdomain, ".", host);
else
host = host.Substring(host.IndexOf(".") + 1);
UriBuilder builder = new UriBuilder(request.Url.Scheme, host, 80, url);
if (request.IsLocal)
builder.Port = request.Url.Port;
url = builder.Uri.ToString();
return htmlHelper.Link(linkText, url, htmlAttributes);
}
private static IHtmlString Link(this HtmlHelper htmlHelper, string text, string url, object htmlAttributes)
{
TagBuilder tag = new TagBuilder("a");
tag.Attributes.Add("href", url);
tag.InnerHtml = text;
tag.MergeAttributes(HtmlHelper.AnonymousObjectToHtmlAttributes(htmlAttributes));
return MvcHtmlString.Create(tag.ToString(TagRenderMode.Normal));
}
@非即时存档帖子链接: