Mvc: APK 包不在 ASP.NET Core MVC 中提供

创建于 2018-05-07  ·  3评论  ·  资料来源: aspnet/Mvc

我想在我的 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为使用非标准扩展名提供文件提供了一种更安全的替代方案。

这也在文档中进行了概述。

所有3条评论

然后我创建了一个 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为使用非标准扩展名提供文件提供了一种更安全的替代方案。

这也在文档中进行了概述。

很好的解释。 谢谢你。

谢谢您联络我们。 我们相信您提出的问题已经得到解答。 如果您仍然觉得需要继续讨论,请随时重新打开它并添加您的评论。

此页面是否有帮助?
0 / 5 - 0 等级