本帖最后由 whoamiwho 于 2013-05-25 21:46:03 编辑

解决方案 »

  1.   


            public string Content(string contentPath) {
                return Content(contentPath, RequestContext.HttpContext);
            }        internal static string Content(string contentPath, HttpContextBase httpContext) {
                if (String.IsNullOrEmpty(contentPath)) {
                    throw new ArgumentException(MvcResources.Common_NullOrEmpty, "contentPath");
                }            if (contentPath[0] == '~') {
                    return PathHelpers.GenerateClientUrl(httpContext, contentPath);
                }
                else {
                    return contentPath;
                }
            }
      

  2.   

         // this method can accept an app-relative path or an absolute path for contentPath
            public static string GenerateClientUrl(HttpContextBase httpContext, string contentPath) {
                if (String.IsNullOrEmpty(contentPath)) {
                    return contentPath;
                }            // many of the methods we call internally can't handle query strings properly, so just strip it out for
                // the time being
                string query;
                contentPath = StripQuery(contentPath, out query);            return GenerateClientUrlInternal(httpContext, contentPath) + query;
            }        private static string GenerateClientUrlInternal(HttpContextBase httpContext, string contentPath) {
                if (String.IsNullOrEmpty(contentPath)) {
                    return contentPath;
                }            // can't call VirtualPathUtility.IsAppRelative since it throws on some inputs
                bool isAppRelative = contentPath[0] == '~';
                if (isAppRelative) {
                    string absoluteContentPath = VirtualPathUtility.ToAbsolute(contentPath, httpContext.Request.ApplicationPath);
                    string modifiedAbsoluteContentPath = httpContext.Response.ApplyAppPathModifier(absoluteContentPath);
                    return GenerateClientUrlInternal(httpContext, modifiedAbsoluteContentPath);
                }            // we only want to manipulate the path if URL rewriting is active, else we risk breaking the generated URL
                NameValueCollection serverVars = httpContext.Request.ServerVariables;
                bool urlRewriterIsEnabled = (serverVars != null && serverVars[_urlRewriterServerVar] != null);
                if (!urlRewriterIsEnabled) {
                    return contentPath;
                }            // Since the rawUrl represents what the user sees in his browser, it is what we want to use as the base
                // of our absolute paths. For example, consider mysite.example.com/foo, which is internally
                // rewritten to content.example.com/mysite/foo. When we want to generate a link to ~/bar, we want to
                // base it from / instead of /foo, otherwise the user ends up seeing mysite.example.com/foo/bar,
                // which is incorrect.
                string relativeUrlToDestination = MakeRelative(httpContext.Request.Path, contentPath);
                string absoluteUrlToDestination = MakeAbsolute(httpContext.Request.RawUrl, relativeUrlToDestination);
                return absoluteUrlToDestination;
            }
      

  3.   

    请问能说一下两者的区别吗UrlHelper.Content:将虚拟(相对)路径转换为应用程序绝对路径。
      

  4.   

     MVC4/Razor2.0 里面用第二种就好了 微软的东西有时候就这样让人很蛋疼  新瓶装旧酒