MVC5如何在代码中找到根路径?

时间:2017-07-08 00:16:54

标签: c# asp.net asp.net-mvc

我有一些帮助方法来构建Html输出,但它只在我的本地开发人员而不是我的登台服务器上才能正确显示。 〜不起作用,因为这不是Razor。

我的本​​地网站路径为http://localhost/testSite
我的登台路径是http://192.168.1.2/

在我的本地生产     的 SRC = “/测试网站/ images.test.jpg”
在我的暂存实例上,它会生成 src =“// images.test.jpg”

var baseUrl = HttpRuntime.AppDomainAppPath;
var tb = new TagBuilder("img");
tb.MergeAttribute("title", "Main Image");
tb.MergeAttribute("src", baseUrl +"\images\test.jpg");
return new MvcHtmlString(tb.ToString(TagRenderMode.SelfClosing));

我确信在代码端有一个内置的方法

3 个答案:

答案 0 :(得分:1)

  

var baseUrl = System.Web.Mvc.UrlHelper.GenerateContentUrl(“〜/ images /”,   HttpContext.Current);

使用GenerateContentUrl可以继续使用〜/

答案 1 :(得分:1)

呃......在查看了所有可用的帮助器和上下文对象之后,我必须得出结论,没有任何函数或方法可以提供完全你想要的东西(除了在其中一个中使用代字号)功能,如其他答案所示)。所有这些都需要某种字符串处理(例如Split()TrimEnd())才能工作。

相反,微软慷慨地给了我们一个创可贴功能,AppendTrailingSlash,您可以用它来解决这个问题:

var baseUrl = VirtualPathUtility.AppendTrailingSlash(HttpRuntime.AppDomainAppPath);
var tb = new TagBuilder("img");
tb.MergeAttribute("title", "Main Image");
tb.MergeAttribute("src", baseUrl +"images/test.jpg");  //notice I removed the initial slash
return new MvcHtmlString(tb.ToString(TagRenderMode.SelfClosing));

AppendTrailingSlash保证不会"加倍"当虚拟目录是" /"时,正斜杠上,这应该适用于您的暂存和开发环境。

P.S。我非常确定您应该使用AppDomainAppVirtualPath而不是AppDomainAppPath,它提供的是物理路径,而不是虚拟路径。

答案 2 :(得分:0)

您好,您也可以尝试使用Using double dot notation in URL link

<强>例如:

../ file意味着在父目录中查找文件。如果您刚刚提交了文件,则会查看当前目录。

由于