gpt4 book ai didi

c# - 在 ASP.NET MVC (C#) 上提供静态文件

转载 作者:行者123 更新时间:2023-11-30 18:47:56 26 4
gpt4 key购买 nike

我是 .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 文件。

即:localhost: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:所以,这就是我到目前为止一直在试验的内容

  1. 我在根目录(与 Models、Controllers 等处于同一级别)上创建了一个名为 Assets 的文件夹。
  2. 在 Asset 中创建子文件夹(即图像、文档等)
  3. 然后我想直接从我的 View 访问这些文件,我会这样:

    img src="@Url.Content("~/Asset/images/picture.png")"

如果我想访问图像文件,上面的例子是合适的。

但是我不确定这是否是理想的方式。然而,这是我目前能遇到的最简单的解决方案(或者我应该说,相当天真)。

如有任何提示,我们将不胜感激。

最佳答案

Suppose I have the following files: logo.jpg, document.pdf, etc.doc, where should I put this (on which folders) ? And how do i access it?

您在 EDIT 2 上的内容完全没问题。 MVC 框架足够智能,可以禁用字典浏览。如果您尝试访问 Assets /assets//assets/images,您将得到 403。

此外,即使您有一个名为“assets”的 Controller 、一个名为“images”的方法和一个字符串 ID“picture.png”,请求也不会命中 Controller 方法。相反,它仍会为您提供图像文件。看起来 MVC 优先于它找到的静态文件而不是 MVC 路由?


Suppose I have a web apps that allows user to upload a document (let's say some pics). What I would like to know is how should the structure of my folder/directory look like?

如果您打算将用户上传的内容作为物理文件存储在应用程序中(而不是将它们保存到持久性存储中),您可以在根目录上创建一个类似“上传”的文件夹,并将他们的上传内容放在那里。

我会通过他们的 ID(希望它是一个 GUID 而不是整数 ID)将他们的上传分开到“上传”下的不同子文件夹中,以防万一当你想在前端显示上传路径时,用户不能轻易猜测其他用户上传的位置:

// assets
// uploads
// xxxx-xxxx-xxxx-xxxx
// files
// xxxx-xxxx-xxxx-xxxx
// files

不要忘记在您发布应用程序的服务器上设置此上传​​文件夹的权限。


In certain occasion, I would also like to access my images from my css file instead.

在这种情况下,您将不得不使用相对 URL,并且 MVC 默认其根目录为 ~/Content。例如,假设你想使用保存在/assets/images/下的 picture.png 作为区 block 的背景图片:

#test-block {
width: 250px;
height: 250px;
background-image: url(`~/assets/images/picture.png`);'
background-size: cover;
}

您认为它会正确访问图片并将其用作 block 的背景。但实际上,它会产生这样的东西:

background-image: localhost/content/~/assets/images/picture.png

这很糟糕,因为您必须使用 ../ 而不是 ~/ 手动返回上一层来抓取图像:

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>

关于c# - 在 ASP.NET MVC (C#) 上提供静态文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23074081/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com