public class CustomRoute : RouteBase
{
public override VirtualPathData GetVirtualPath(RequestContext requestContext, RouteValueDictionary routeValues)
{
var virtual_path_data = new VirtualPathData( this, "http://example.com" );
return virtual_path_data;
}
}
ASP.NET自动似乎在从VirtualPathData返回的任何(绝对)路径中添加一个前导斜杠,在此示例中返回/http://example.com
。
问题:
Url.Action
,RedirectToAction
以及我不知道的其他用例。背景
我已经编写了一个基于XML的路由引擎,它支持多个域名。因此,当我生成仅在其他域上可用的网址时,我想生成一个绝对网址,包括域名。
<host name="exm.com" controller="ShortUrl">
<parameter name="code" action="Redirect" />
</host>
<host name="*" default="example.com" controller="Home" action="Index">
<x name="demo" controller="Home" action="Demo" />
<x name="comments" controller="Comment" action="List">
<x name="write" action="Write" />
<x name="delete" action="Delete" />
<x>
</host>
产生如下组合:
Url.Action("Demo", "Home")
Url.Action("Write", "Comment")
http://example.com/comments/write
Url.Action("Redirect", "ShortUrl", new { code = "gH8x" } )
请注意,example.com和exm.com都指的是相同的应用程序IP,并在应用程序中路由。
答案 0 :(得分:0)
这是一篇关于某人的博文,似乎有关于你正在尝试做什么的说明。 MVC Domain Routing
答案 1 :(得分:0)
最后,我做了一个相对丑陋的黑客,我用一个特殊字符作为前缀,以确定它是否应该是一个绝对的URL。
public static string HostAction(this UrlHelper url, string actionName, string controllerName, object routeValues = null, bool forceOrigin = false)
{
var route_value_dictionary = CloneRouteValues( routeValues );
// this is being used in the routing to determine
// if they need to route for an absolute URL
route_value_dictionary.Add( "routeWithHostName", true );
// if forceOrigin is false, then the Routing will not return
// an absolute path if it's not necessary (url relative to the current domain)
route_value_dictionary.Add("forceOrigin", forceOrigin );
var path = url.Action( actionName, controllerName, route_value_dictionary );
if ( path.Length < 2 )
return path;
// starts with /$ ? then this is an absolute URL. Strip the first two characters
if ( path[1] == '$' )
return path.Substring( 2 );
else
return path;
}
绝对不理想,但直到现在我似乎还没有太多的东西一直在打破它。