(注:试图寻找类似的问题,但最近的问题似乎仍然不符合我的问题。即MVC - Application root appears twice in url using Url.Content/Url.Action )
我目前有两个ASP.NET MVC 3 RC应用程序在一个域下运行,即
mydomain.com/app1
mydomain.com/app2
现在,由于它是一个单独的应用程序,我注册了另一个域名,并启用了掩码转发到其中一个应用程序(即http://foo.com将加载http://mydomain.com/app1,浏览器中只显示http://foo.com,而不是http://mydomain.com/app1)。
这就是MVC开始抱怨的地方。Url.Content()和Html.Action()都会生成意外的URL。例如,在Html.Action()的情况下,如果我有@Html.ActionLink("About", "Index", "About"),我希望得到http://foo.com/about,但最终得到的是@Html.ActionLink("About", "Index", "About")
因为http://foo.com/app1/about转换为http://mydomain.com/app1/app1/about,所以链接显然无法工作。
类似地,对于Url.Content,如果我有href="@Url.Content("~/Content/Site.css")",浏览器将无法加载样式表,因为它认为位置在href="@Url.Content("~/Content/Site.css")"而不是http://foo.com/Content/Site.css
有什么办法,我可以让MVC忘记它的起始目录(即从它生成的URL中删除"app1/“吗?)
谢谢你的阅读,如果这里需要更多的信息,请告诉我。
发布于 2010-11-19 16:51:38
现在,有一些解决办法。
对于Url.Content(),我们将简单地从Url.Content("~/...")中删除"~“,从而消除相对路径(即/app1)
至于Html.ActionLink(),解决方案似乎很混乱,因为总是假定有相对路径,所以这里的解决方法是暂时的。有谁有更好的解决方案吗?
public static MvcHtmlString ActionLinkAbsolute(
this HtmlHelper<dynamic> htmlHelper, string linkText, string actionName, string controllerName)
{
MvcHtmlString result = LinkExtensions.ActionLink(htmlHelper, linkText, actionName, controllerName);
result = new MvcHtmlString(result.ToHtmlString().Replace(VirtualPathUtility.ToAbsolute("~"), String.Empty));
return result;
}这里的解决办法并非没有后果。为了支持URL掩蔽,并忽略相对路径,http://mydomain.com/app1将不会生成预期的链接,因为它总是删除相对路径。这并不完美,但这是我可以忍受的一个缺点。
https://stackoverflow.com/questions/4221392
复制相似问题