![](/img/trans.png)
[英]Static file not served through IIS but serving through localhost - ASP.NET Core 3.1 MVC & C#
[英]Serving static file on ASP.NET MVC (C#)
我是 .NET 框架的新手,我想知道提供靜態內容和訪問用戶生成內容的最佳方式是什么。
假設我有以下文件:
logo.jpg
document.pdf
etc.doc
我應該把它放在哪里(在哪個文件夾上)? 我如何訪問它?
最后,把它帶到另一個層次。 假設我有一個允許用戶上傳文檔的網絡應用程序(比如一些圖片)。 我想知道的是我的文件夾/目錄的結構應該是什么樣的?
通常在 django/CI 中,我會有一個如下文件夾:
應用程序/{all-web-app-related-folder-and-file-goes-here} 上傳/{all-related-user-generated-content-goes-here-categorized-by-file-type} assets/{css -javascript-document-would-go-here}
注意:我沒有做任何事情或嘗試做任何事情。 僅僅因為我不知道如何訪問嘗試靜態內容。 我曾經嘗試訪問位於 Content/Scripts 文件夾中的 *.css 或 *.js 文件。
即:本地主機:12345/Scripts/jquery.js
事實證明,這在 ASP.NET MVC 中並不是一個簡單的過程
哦,順便說一句,在某些情況下,我還想從我的 css 文件中訪問我的圖像。 這給我帶來了另一個困惑。
編輯 1:我閱讀了以下文章
http://www.c-sharpcorner.com/uploadfile/dhananjaycoder/working-with-images-in-Asp-Net-mvc-framework/
但是它不適用於我當前的 MVC 版本(我使用的是 MVC 5)
編輯 2 :所以,這是我迄今為止一直在試驗的
然后我想直接從我的視圖中訪問這些文件,我會這樣:
img src="@Url.Content("~/Asset/images/picture.png")"
如果我想訪問圖像文件,上面的例子是合適的。
但是,我不確定這是否是理想的方法。 然而,這是我目前能遇到的最簡單的解決方案(或者我應該說,相當天真)。
任何提示將不勝感激。
假設我有以下文件:logo.jpg、document.pdf 等.doc,我應該把它放在哪里(在哪個文件夾上)? 我如何訪問它?
您在 EDIT 2 上的內容完全沒問題。 MVC 框架足夠智能,可以禁用字典瀏覽。 如果您嘗試資產/assets/
或/assets/images
,您將獲得 403。
此外,即使您有一個名為“assets”的控制器、一個名為“images”的方法和一個字符串 id“picture.png”,請求也不會命中控制器方法。 相反,它仍然會為您提供圖像文件。 看起來 MVC 優先於它找到的靜態文件而不是 MVC 路由?
假設我有一個允許用戶上傳文檔的網絡應用程序(比如一些圖片)。 我想知道的是我的文件夾/目錄的結構應該是什么樣的?
如果您打算僅將用戶上傳的內容作為物理文件存儲在應用程序中(而不是將它們保存到持久性存儲中),您可以在根目錄上創建一個類似於“上傳”的文件夾並將其上傳內容放在那里。
我會通過他們的 ID(希望它是一個 GUID 而不僅僅是整數 ID)將他們的上傳分開到“上傳”下的不同子文件夾中,以防萬一你想在前端顯示上傳路徑,用戶無法輕易猜到其他用戶上傳的是:
// assets
// uploads
// xxxx-xxxx-xxxx-xxxx
// files
// xxxx-xxxx-xxxx-xxxx
// files
不要忘記在您發布應用程序的服務器上設置此上傳文件夾的權限。
在某些情況下,我還想從我的 css 文件中訪問我的圖像。
在這種情況下,您將不得不使用相對 URL,並且 MVC 將其根目錄默認為~/Content
。 例如,假設您想使用保存在 /assets/images/ 下的圖片.png 作為塊的背景圖片:
#test-block {
width: 250px;
height: 250px;
background-image: url(`~/assets/images/picture.png`);'
background-size: cover;
}
您認為它會正確訪問圖片並將其用作塊的背景。 但實際上,它會生成如下內容:
background-image: localhost/content/~/assets/images/picture.png
這是一個無賴,因為您必須手動返回 1 級以獲取圖像,使用../
而不是~/
:
background-image: url(`../assets/images/picture.png`);'
對我來說,這不是一個可以接受的解決方案,如果您將應用程序發布到服務器上的虛擬文件夾(而不是 wwwroot),那將會很麻煩。
為了設置這樣的背景圖像,我更喜歡在@Url.Content()
的幫助下使用內聯樣式,因為我不需要擔心它們的路徑是如何相互關聯的:
<div id="test-block"
style="background-image: url('@Url.Content("~/assets/images/picture.png")');">
</div>
ASP.NET MVC 默認允許靜態文件服務。 而不是使用@URL.Content 直接寫以 / 開頭的路徑,表示根文件夾
<img src="/Asset/images/picture.png" />
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.