2016-08-05 179 views
5

我試圖從我的ASP.NET Core應用程序的wwwroot文件夾內我的images文件夾中提供文件,其中我已經在Startup類中啓用了靜態文件訪問。將絕對文件路徑轉換爲相對的

HostingEnvironment服務爲我提供了一個WebRootPath屬性,它爲我提供了wwwroot文件夾的絕對路徑,但是使用此路徑在我的瀏覽器控制檯中給我一個「不允許加載本地資源」的錯誤。

如果我從我的瀏覽器使用localhost +相對路徑訪問文件,我可以獲取映像文件,因此不存在授權問題。

我現在需要的是能夠將該絕對路徑轉換爲我的Web服務器的相對路徑。

+0

請,不要的東西標記爲問題的標題! – Tseng

回答

4

鑑於您遇到的錯誤,在我看來,您正嘗試在您的視圖中使用_env.WebRootPath + "/images/textfile.txt",例如作爲href屬性。

  • 否則將在瀏覽器中結束試圖從你的頁面請求的URL看起來像file:///C:/Users/PathToYourSite/wwwroot/images/textfile.txt,在您遇到的錯誤,結束。您可以閱讀關於on this answer的更多信息,但在Chrome等瀏覽器中,默認情況下,http協議對文件協議的請求被禁用。

所以,當你想讀取文件的內容,作爲您的服務器端邏輯的一部分IHostingEnvironment的方法應該是使用,所以你可以做一些與他們。

不過,如果你需要的是生成鏈接到您的文件中的wwwroot和你的意見使用它們,你有兩個選擇:

  • 使用IUrlHelper解決市民url到wwwroot裏面的文件,其中"~/"是wwwroot文件夾。

    @Url.Content("~/images/textfile.txt") 
    
  • 直接創建一個Razor視圖的錨與開始"~/" href屬性:那麼當你需要它,像一個href使用它。 (你甚至可以智能感知存在)

    <a href="~/images/textfile.txt">Get file from wwwroot</a> 
    
3

爲了訪問文件wwwroot中,注入IHostingEnvironment到你的控制器構造:

private IHostingEnvironment _env; 

     public HomeController(IHostingEnvironment env) 
     { 
      _env = env; 
     } 

更新您的控制器讀取WebRootPath屬性和相對文件路徑追加到它

var content = System.IO.File.ReadAllText(_env.WebRootPath + "/images/textfile.txt"); 

這將讀取位於/wwwroot/images/textfile.txt內的文件的所有內容。

希望可以幫助

相關問題