ASP.NET虚拟路径在哪里解析链接中的波浪号~
,例如
<link rel="stylesheet" type="text/css" href="~/Css/Site.css" />
它是重定向的,还是ASP.NET MVC中的RedirectToAction
?
答案 0 :(得分:20)
从这里得到它:
VirtualPathUtility.ToAbsolute(contentPath, httpContext.Request.ApplicationPath);
以下是 System.Web.Mvc DLL 中PathHelpers
类的反射器输出:
private static string GenerateClientUrlInternal(HttpContextBase httpContext, string contentPath)
{
if (string.IsNullOrEmpty(contentPath))
{
return contentPath;
}
if (contentPath[0] == '~')
{
string virtualPath = VirtualPathUtility.ToAbsolute(contentPath, httpContext.Request.ApplicationPath);
string str2 = httpContext.Response.ApplyAppPathModifier(virtualPath);
return GenerateClientUrlInternal(httpContext, str2);
}
NameValueCollection serverVariables = httpContext.Request.ServerVariables;
if ((serverVariables == null) || (serverVariables["HTTP_X_ORIGINAL_URL"] == null))
{
return contentPath;
}
string relativePath = MakeRelative(httpContext.Request.Path, contentPath);
return MakeAbsolute(httpContext.Request.RawUrl, relativePath);
}
答案 1 :(得分:2)
ASP.NET包含Web应用程序 root运算符(〜),您可以使用它 在服务器中指定路径时 控制。 ASP.NET解决了〜 运算符到当前的根 应用。你可以用〜 运算符与文件夹一起使用 指定基于的路径 当前的根。
基本上,代字号的目的是,即使您将网站部署到不同的地方,也可以拥有正确解析的路径。相对路径无法轻松完成此操作,因为控件可能会在您网站的不同文件夹中呈现。绝对路径无法实现此目的,因为您的网站可能部署到不同的位置 - 如果没有其他地方,本地进行的测试部署与将实施部署发布到实时服务器的情况就是这种情况。
Server.MapPath
可以出于类似的原因使用。
答案 2 :(得分:1)
ASP.Net在每个 runat = server 控件中将tilde(〜)与应用程序的根目录进行转换。它等同于HttpRuntime.AppDomainAppVirtualPath属性。