首页 > 解决方案 > .net 核心 Web API,静态文件图像无法正确加载?

问题描述

我有 .net 核心 Web API项目。我想在这个项目中放一些静态图像。我在启动文件中有以下代码

var provider = new FileExtensionContentTypeProvider();
// Add new mappings
provider.Mappings[".myapp"] = "application/x-msdownload";
provider.Mappings[".htm3"] = "text/html";
provider.Mappings[".image"] = "image/png";
provider.Mappings[".png"] = "image/png";
// Replace an existing mapping
provider.Mappings[".rtf"] = "application/x-msdownload";
app.UseStaticFiles();
app.UseStaticFiles(new StaticFileOptions()
{
   FileProvider = new PhysicalFileProvider(
   Path.Combine(Directory.GetCurrentDirectory(), @"MyStaticFiles")),
   RequestPath = new PathString("/StaticFiles"),
   ContentTypeProvider = provider
});   

当我运行或部署这个 Web 项目时,当我浏览 test.tt/StaticFiles/test.png 或 test.tt/wwwroot/StaticFiles/test.png 或测试时,我检查了它下面有 StaticFiles 文件夹有 test.png。 tt/wwwroot/StaticFiles/images/test.png

浏览器没有加载该图像,它正在显示白页,我在 F12 的网络控制台上检查,它正在提供文档和 json 类型的响应。我的问题是图像没有显示,我尝试了更多图像但没有帮助。我确定我的路径中有图像文件夹。

你能告诉我如果我浏览 test.png,直接点击路径来获取静态文件 .net 核心 WEB API 图像吗?

标签: asp.net-core-2.0asp.net-core-webapiasp.net-core-2.1asp.net-core-2.2

解决方案


默认情况下,静态文件进入wwwroot项目根目录。调用app.UseStaticFiles(), 会导致此目录在站点的基本路径中提供服务,即/. 因此,类似的文件wwwroot/images/test.png可以在/images/test.png(注意:没有wwwroot部分)。

我不确定您在此处使用此代码的其余部分在做什么,但您实际上是在添加一个额外的服务目录 at [project root]/MyStaticFiles,然后将在/StaticFiles. 因此,首先, test.png 必须实际上是 in MyStaticFiles而不是 wwwroot,然后您可以通过请求访问/StaticFiles/test.png

但是,不需要这个其他目录。如果您只是想添加一些额外的媒体类型,您可以通过以下方式进行:

services.Configure<StaticFileOptions>(o =>
{
    var provider = new FileExtensionContentTypeProvider();
    provider.Mappings.Add(".myapp", "application/x-msdownload");
    // etc.
    o.ContentTypeProvider = provider;
});

然后只需使用:

app.UseStaticFiles();

没有其他要求。


推荐阅读