我有一个以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查询,以自动生成正确的图片网址。感谢
答案 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\" />");
}