ASP.NET vNext 如何处理 config.json 中的缓存、压缩和 MimeMap?
How does ASP.NET vNext handle Caching, Compression & MimeMap in config.json?
在以前的版本中,所有这些设置都可以在 Web.Config 文件中添加和调整,使用如下代码:
<staticContent>
<mimeMap fileExtension=".webp" mimeType="image/webp" />
<!-- Caching -->
<clientCache cacheControlMode="UseMaxAge" cacheControlMaxAge="96:00:00" />
</staticContent>
<httpCompression directory="%SystemDrive%\inetpub\temp\IIS Temporary Compressed Files">
<scheme name="gzip" dll="%Windir%\system32\inetsrv\gzip.dll" />
<dynamicTypes>
<add mimeType="text/*" enabled="true" />
<add mimeType="message/*" enabled="true" />
<add mimeType="application/javascript" enabled="true" />
<add mimeType="*/*" enabled="false" />
</dynamicTypes>
<staticTypes>
<add mimeType="text/*" enabled="true" />
<add mimeType="message/*" enabled="true" />
<add mimeType="application/javascript" enabled="true" />
<add mimeType="*/*" enabled="false" />
</staticTypes>
</httpCompression>
<urlCompression doStaticCompression="true" doDynamicCompression="true"/>
但是,随着 Web.Config 不再出现在 ASP.NET vNext 中,您如何调整这样的设置?我搜索了 and the ASP.NET Github 存储库,但没有找到任何东西 - 有什么想法吗?
正如评论中的 "agua from mars" 所述,如果您使用的是 IIS,则可以使用 IIS 的静态文件处理,在这种情况下,您可以使用 web.config 中的 <system.webServer>
部分文件,它将像往常一样工作。
如果您使用 ASP.NET 5 的 StaticFileMiddleware,那么它有自己的 MIME 映射,作为 FileExtensionContentTypeProvider 实现的一部分。 StaticFileMiddleware
有一个 StaticFileOptions
,当你在 Startup.cs
中初始化它时,你可以用它来配置它。在该选项 class 中,您可以设置内容类型提供程序。您可以实例化默认内容类型提供程序,然后调整映射字典,或者您可以从头开始编写整个映射(不推荐)。
ASP.NET 核心 - mime 映射:
如果您为整个站点提供的扩展文件类型集不会改变,您可以配置 ContentTypeProvider
class 的单个实例,然后利用 DI 使用它在提供静态文件时,像这样:
public void ConfigureServices(IServiceCollection services)
{
...
services.AddInstance<IContentTypeProvider>(
new FileExtensionConentTypeProvider(
new Dictionary<string, string>(
// Start with the base mappings
new FileExtensionContentTypeProvider().Mappings,
// Extend the base dictionary with your custom mappings
StringComparer.OrdinalIgnoreCase) {
{ ".nmf", "application/octet-stream" }
{ ".pexe", "application/x-pnal" },
{ ".mem", "application/octet-stream" },
{ ".res", "application/octet-stream" }
}
)
);
...
}
public void Configure(
IApplicationBuilder app,
IContentTypeProvider contentTypeProvider)
{
...
app.UseStaticFiles(new StaticFileOptions() {
ContentTypeProvider = contentTypeProvider
...
});
...
}
在以前的版本中,所有这些设置都可以在 Web.Config 文件中添加和调整,使用如下代码:
<staticContent>
<mimeMap fileExtension=".webp" mimeType="image/webp" />
<!-- Caching -->
<clientCache cacheControlMode="UseMaxAge" cacheControlMaxAge="96:00:00" />
</staticContent>
<httpCompression directory="%SystemDrive%\inetpub\temp\IIS Temporary Compressed Files">
<scheme name="gzip" dll="%Windir%\system32\inetsrv\gzip.dll" />
<dynamicTypes>
<add mimeType="text/*" enabled="true" />
<add mimeType="message/*" enabled="true" />
<add mimeType="application/javascript" enabled="true" />
<add mimeType="*/*" enabled="false" />
</dynamicTypes>
<staticTypes>
<add mimeType="text/*" enabled="true" />
<add mimeType="message/*" enabled="true" />
<add mimeType="application/javascript" enabled="true" />
<add mimeType="*/*" enabled="false" />
</staticTypes>
</httpCompression>
<urlCompression doStaticCompression="true" doDynamicCompression="true"/>
但是,随着 Web.Config 不再出现在 ASP.NET vNext 中,您如何调整这样的设置?我搜索了
正如评论中的 "agua from mars" 所述,如果您使用的是 IIS,则可以使用 IIS 的静态文件处理,在这种情况下,您可以使用 web.config 中的 <system.webServer>
部分文件,它将像往常一样工作。
如果您使用 ASP.NET 5 的 StaticFileMiddleware,那么它有自己的 MIME 映射,作为 FileExtensionContentTypeProvider 实现的一部分。 StaticFileMiddleware
有一个 StaticFileOptions
,当你在 Startup.cs
中初始化它时,你可以用它来配置它。在该选项 class 中,您可以设置内容类型提供程序。您可以实例化默认内容类型提供程序,然后调整映射字典,或者您可以从头开始编写整个映射(不推荐)。
ASP.NET 核心 - mime 映射:
如果您为整个站点提供的扩展文件类型集不会改变,您可以配置 ContentTypeProvider
class 的单个实例,然后利用 DI 使用它在提供静态文件时,像这样:
public void ConfigureServices(IServiceCollection services)
{
...
services.AddInstance<IContentTypeProvider>(
new FileExtensionConentTypeProvider(
new Dictionary<string, string>(
// Start with the base mappings
new FileExtensionContentTypeProvider().Mappings,
// Extend the base dictionary with your custom mappings
StringComparer.OrdinalIgnoreCase) {
{ ".nmf", "application/octet-stream" }
{ ".pexe", "application/x-pnal" },
{ ".mem", "application/octet-stream" },
{ ".res", "application/octet-stream" }
}
)
);
...
}
public void Configure(
IApplicationBuilder app,
IContentTypeProvider contentTypeProvider)
{
...
app.UseStaticFiles(new StaticFileOptions() {
ContentTypeProvider = contentTypeProvider
...
});
...
}