Asp.net-Core
將絕對文件路徑轉換為相對路徑
我正在嘗試從我的 ASP.NET Core 應用程序的 wwwroot 文件夾中的圖像文件夾中提供文件,我已經在
Startup該類中啟用了靜態文件訪問。該
HostingEnvironment服務為我提供了一個WebRootPath屬性,該屬性為我提供了 wwwroot 文件夾的絕對路徑,但使用此路徑會在我的瀏覽器控制台中出現“不允許載入本地資源”錯誤。如果我使用
localhost+ 相對路徑從瀏覽器訪問文件,我可以獲取圖像文件,因此沒有關於授權的問題。我現在需要的只是能夠將該絕對路徑轉換為我的 Web 伺服器的相對路徑。
鑑於您遇到的錯誤,在我看來您正試圖
_env.WebRootPath + "/images/textfile.txt"在您的視圖中使用,例如作為 href 屬性。
- 這樣做最終會導致瀏覽器嘗試從您的頁面請求一個看起來像 的 url,
file:///C:/Users/PathToYourSite/wwwroot/images/textfile.txt最終導致您遇到的錯誤。您可以在此答案上閱讀更多相關資訊,但在現代 Chrome 等瀏覽器中,預設情況下禁用從 http 協議到文件協議的請求。因此,
IHostingEnvironment當您想要讀取文件的內容作為伺服器端邏輯的一部分時,應該使用該方法,以便您可以對它們做一些事情。但是,如果您需要在 wwwroot 中生成指向您的文件的連結並在您的視圖中使用它們,您有幾個選擇:
- 使用 將
IUrlHelper公共 url 解析為 wwwroot 內的文件,"~/"wwwroot 文件夾在哪裡。然後在需要時使用它,例如 href:@Url.Content("~/images/textfile.txt")
- 使用以 .開頭的 href 屬性直接在 razor 視圖中創建錨點
"~/"。(你甚至在那裡得到智能感知)<a href="~/images/textfile.txt">Get file from wwwroot</a>