我在内容和视图文件夹中有相同的图片。我试图显示如下图像:
<img src="~/Content/Images/download.png" alt="Content folder" />
<br />
<br />
<img src="~/Views/Home/download.png" alt="Views folder" />
<br />
内容文件夹中的图片显示成功,但“视图”文件夹中的图片未显示,并显示以下错误:
无法加载资源:服务器响应状态为404 (未找到)
但实际上,资源就在那里。这是我的文件夹:
你可以告诉我,我做错了哪一点?我正在使用带有razor引擎的MVC 5和Visual Studio 2015社区版。答案 0 :(得分:4)
除非您更改了默认配置,否则文件夹Views
包含文件Web.config
,其中包含限制访问此文件夹中文件的设置:
<system.webServer>
<handlers>
<remove name="BlockViewHandler"/>
<add name="BlockViewHandler" path="*" verb="*" preCondition="integratedMode"
type="System.Web.HttpNotFoundHandler" />
</handlers>
</system.webServer>
因此,您可以删除此处理程序(不建议出于安全目的),也可以将静态文件移动到其他文件夹,例如: Content
。
答案 1 :(得分:3)
这是因为ASP MVC的内置安全性可以保护您直接访问的视图。检查从BlockViewHandler
~/Views/web.config
”处理程序条目
我的建议是将图片移至“Content
”文件夹并保持“Views
”文件夹清洁。
答案 2 :(得分:3)
任何MVC版本不允许从Views文件夹加载除html以外的其他资源。 因为当您调用URL时,它会等待 text / html内容类型,并且因为主视图文件夹中的图像无法在页面中呈现。
要获得更好的信息,请在浏览器(开发工具/ F12)网络标签中查看文件标头请求和响应。
来自观看次数的图片响应:
内容文件夹中图片的响应:
答案 3 :(得分:0)
在.net core 3中,您还需要在startup.cs下面的这一行
app.UseStaticFiles(new StaticFileOptions
{
FileProvider = new PhysicalFileProvider(
Path.Combine(Directory.GetCurrentDirectory(), @"wwwroot\images")),
RequestPath = "/wwwroot/images"
});