我想在我的 ASP.NET Core MVC 项目中提供 .apk 文件,但我不能,因为它返回 404。
我在 VS 2017 中使用默认模板创建了一个简单的 ASP.NET Core MVC 项目,并将.apk
文件添加到wwwroot
文件夹,然后我尝试使用/application.apk
访问它路径,但它不起作用,而/favicon.ico
起作用,并且该目录中的其他静态内容起作用,因为在默认模板中调用app.UseStaticFiles()
。
然后我尝试更改配置,从wwwroot
文件夹中取出静态内容并将application.apk
放在项目的根目录中(从wwwroot
开始的一个文件夹)并配置项目使用:
app.UseStaticFiles(new StaticFileOptions()
{
FileProvider = new PhysicalFileProvider(Directory.GetCurrentDirectory())
});
又没有结果。 我得到404。
然后我创建了一个 Web.config 文件并添加了这个 MIME 类型:
<staticContent>
<mimeMap fileExtension=".apk" mimeType="application/vnd.android.package-archive" />
</staticContent>
不过,不提供 .apk 文件。
我该怎么办?
然后我创建了一个 Web.config 文件并添加了这个 MIME 类型
web.config 用于配置 IIS。 除非您使用 IIS 来提供静态文件,否则这没有什么区别。
如文档中所述:
静态文件中间件可以理解近 400 种已知的文件内容类型。 如果用户请求一个未知文件类型的文件,静态文件中间件会返回一个 HTTP 404(未找到)响应。
如果您想使用静态文件中间件提供 APK 文件,您可以打开ServeUnknownFileTypes
或使用FileExtensionContentTypeProvider
添加扩展名。
FileExtensionContentTypeProvider
添加额外的扩展(推荐)var provider = new FileExtensionContentTypeProvider();
provider.Mappings[".apk"] = "application/vnd.android.package-archive";
app.UseStaticFiles(new StaticFileOptions
{
FileProvider = new PhysicalFileProvider(Directory.GetCurrentDirectory()),
ContentTypeProvider = provider
});
这也在文档中进行了概述。
app.UseStaticFiles(new StaticFileOptions
{
FileProvider = new PhysicalFileProvider(Directory.GetCurrentDirectory()),
ServeUnknownFileTypes = true
});
但请注意,不鼓励这样做,因为它可能存在安全风险:
启用
ServeUnknownFileTypes
存在安全风险。 默认情况下它是禁用的,并且不鼓励使用它。FileExtensionContentTypeProvider
为使用非标准扩展名提供文件提供了一种更安全的替代方案。
这也在文档中进行了概述。
很好的解释。 谢谢你。
谢谢您联络我们。 我们相信您提出的问题已经得到解答。 如果您仍然觉得需要继续讨论,请随时重新打开它并添加您的评论。
最有用的评论
web.config 用于配置 IIS。 除非您使用 IIS 来提供静态文件,否则这没有什么区别。
如文档中所述:
如果您想使用静态文件中间件提供 APK 文件,您可以打开
ServeUnknownFileTypes
或使用FileExtensionContentTypeProvider
添加扩展名。使用
FileExtensionContentTypeProvider
添加额外的扩展(推荐)这也在文档中进行了概述。
提供未知文件类型
但请注意,不鼓励这样做,因为它可能存在安全风险:
这也在文档中进行了概述。