用于http查询的等效Server.MapPath

时间:2017-10-09 15:55:03

标签: c# asp.net-mvc razor

我有一个以http://localhost:1234开头的.net Mvc应用程序。 在制作中,网址为http://mywebsite/mysubfolder

在HelperExtension中,我有一个渲染图像路径的方法,如:

public static MvcHtmlString DisplayPicture(this HtmlHelper html, string model)
{ 
    [...]
    return new MvcHtmlString("<img src=\"/Content/images/image.png\" />");
}

在本地,没问题,但在生产中,浏览器搜索加载http://mywebsite/Content/images/image.png而不是http://mywebsite/mysubfolder/Content/images/image.png

因此,我正在搜索相当于Server.MapPath的http查询,以自动生成正确的图片网址。感谢

2 个答案:

答案 0 :(得分:1)

您可以使用此通用扩展方法传递path和Request参数,返回Http URI

public static class RequestExtension
{
    public static string MapHttpPath(this HttpRequest currentRequest, string path)
    {
        if (string.IsNullOrEmpty(path)) return null;

        path = path.Replace("~", "");
        if (path.StartsWith("/"))
            path = path.Substring(1, path.Length - 1);

        return string.Format("{0}://{1}{2}/{3}",
            currentRequest.Url.Scheme,
            currentRequest.Url.Authority,
            System.Web.HttpRuntime.AppDomainAppVirtualPath == "/" ? "" : System.Web.HttpRuntime.AppDomainAppVirtualPath,
            path);
    }
}

答案 1 :(得分:0)

以下代码将返回您的应用程序基本路径,无论您当前路径中有多少路由值:

public string GetBasePath()
{
    var uri = System.Web.HttpContext.Current.Request.Url;
    var vpa = System.Web.HttpRuntime.AppDomainAppVirtualPath;
    url = string.Format("{0}://{1}{2}", uri.Scheme, uri.Authority, vpa == "/" ? string.Empty : vpa);

    return url;
}

创建上述方法后,相应地更改代码:

public static MvcHtmlString DisplayPicture(this HtmlHelper html, string model)
{ 
    [...]
    string basePath = GetBasePath();
    return new MvcHtmlString("<img src=\"" + basePath + "/Content/images/image.png\" />");
}