ASP.NET vNext如何处理缓存,压缩和扩展? config.json中的MimeMap?

时间:2015-02-25 12:49:02

标签: asp.net asp.net-mvc caching compression asp.net-core

在以前的版本中,可以使用类似下面的代码在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中,你如何调整这样的设置?我搜索了netASP.NET Github回购,但没有发现任何想法?

1 个答案:

答案 0 :(得分:8)

正如“火星中的agua”在评论中指出的,如果您使用的是IIS,则可以使用IIS的静态文件处理,在这种情况下,您可以使用web.config文件中的<system.webServer>部分,像往常一样工作。

如果您正在使用ASP.NET 5的StaticFileMiddleware,那么它有自己的MIME映射,它们是FileExtensionContentTypeProvider实现的一部分。 StaticFileMiddleware有一个StaticFileOptions,您可以在Startup.cs初始化它时使用ContentTypeProvider进行配置。在该选项类中,您可以设置内容类型提供程序。您可以实例化默认的内容类型提供程序,然后只需调整映射字典,或者您可以从头开始编写整个映射(不推荐)。


ASP.NET核心 - mime映射:

如果您要为整个站点提供的扩展文件类型集不会更改,则可以配置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 ... }); ... } 类的单个实例,然后利用DI在提供静态文件时使用它,像这样:

{{1}}