Asp.Net Mvc 5图像无法显示

时间:2016-09-18 10:20:35

标签: c# asp.net asp.net-mvc razor asp.net-mvc-5

我在内容视图文件夹中有相同的图片。我试图显示如下图像:

<img src="~/Content/Images/download.png" alt="Content folder" />
<br />
<br />
<img src="~/Views/Home/download.png" alt="Views folder" />
<br />

内容文件夹中的图片显示成功,但“视图”文件夹中的图片未显示,并显示以下错误:

  

无法加载资源:服务器响应状态为404   (未找到)

enter image description here

但实际上,资源就在那里。这是我的文件夹:

enter image description here

你可以告诉我,我做错了哪一点?我正在使用带有razor引擎的MVC 5和Visual Studio 2015社区版。

4 个答案:

答案 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)网络标签中查看文件标头请求和响应

来自观看次数的图片响应:

enter image description here

内容文件夹中图片的响应:

enter image description here

答案 3 :(得分:0)

在.net core 3中,您还需要在startup.cs下面的这一行

app.UseStaticFiles(new StaticFileOptions
            {
                FileProvider = new PhysicalFileProvider(
                Path.Combine(Directory.GetCurrentDirectory(), @"wwwroot\images")),
                RequestPath = "/wwwroot/images"
            });