gpt4 book ai didi

asp.net - 在 ASP.NET Core MVC 的操作级别压缩过滤器

转载 作者:行者123 更新时间:2023-12-04 05:59:47 26 4
gpt4 key购买 nike

我正在将 ASP.NET MVC 5 应用程序迁移到 ASP.NET Core 2.1。在“旧”应用程序中,我有一个 Compress 过滤器,它将 Gzip 应用于特定请求的响应。这样我就只能压缩特定的请求,而不是所有的请求。

根据我的理解,ASP.NET Core 有一种使用中间件的不同方法,它只让您有机会对所有请求应用压缩(将其添加到管道中)或根本不应用它。

有没有办法通过创建 ActionFilterAttribute 来实现我想要的?这是我的旧代码:

public class CompressAttribute : ActionFilterAttribute
{
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
var acceptEncoding = filterContext.HttpContext.Request.Headers["Accept-Encoding"];

if (string.IsNullOrEmpty(acceptEncoding))
return;

acceptEncoding = acceptEncoding.ToLower();
var response = filterContext.HttpContext.Response;
if (acceptEncoding.Contains("gzip"))
{
response.AppendHeader("Content-Encoding", "gzip");
response.Filter = new GZipStream(response.Filter, CompressionMode.Compress);
}
else if (acceptEncoding.Contains("deflate"))
{
response.AppendHeader("Content-Encoding", "deflate");
response.Filter = new DeflateStream(response.Filter, CompressionMode.Compress);
}
}
}

最佳答案

我发现了两种不同的方法来将压缩应用于特定场景:

1) 创建中间件 并在应用压缩之前分析请求。我不喜欢这种方法,因为中间件会为所有请求运行,并且必须检查请求信息,从而影响性能。

2) 修改Web.config文件 (这是我采用的方法)并将压缩应用于某些动态和静态类型。发布 ASP.NET Core 应用程序时,会自动生成 web.config。我们可以编辑 web.config 文件并添加压缩,就像我在以下示例中所做的那样:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
<system.webServer>
<urlCompression doStaticCompression="true" doDynamicCompression="true" />
<httpCompression>
<dynamicTypes>
<clear />
<add enabled="true" mimeType="text/*" />
<add enabled="true" mimeType="message/*" />
<add enabled="true" mimeType="application/x-javascript" />
<add enabled="true" mimeType="application/javascript" />
<add enabled="true" mimeType="application/json" />
<add enabled="false" mimeType="*/*" />
<add enabled="true" mimeType="application/atom+xml" />
<add enabled="true" mimeType="application/atom+xml;charset=utf-8" />
</dynamicTypes>
<staticTypes>
<clear />
<add enabled="true" mimeType="text/*" />
<add enabled="true" mimeType="message/*" />
<add enabled="true" mimeType="application/javascript" />
<add enabled="true" mimeType="application/atom+xml" />
<add enabled="true" mimeType="application/xaml+xml" />
<add enabled="false" mimeType="*/*" />
</staticTypes>
</httpCompression>
<handlers>
<add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModule" resourceType="Unspecified" />
</handlers>
<aspNetCore processPath="dotnet" arguments=".\YourApplicationName.dll" stdoutLogEnabled="false" stdoutLogFile="\\?\%home%\LogFiles\stdout" />
</system.webServer>
</configuration>

关于asp.net - 在 ASP.NET Core MVC 的操作级别压缩过滤器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50918729/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com