gpt4 book ai didi

c# - 压缩 Action 过滤器 ASP.NET Core

转载 作者:太空狗 更新时间:2023-10-30 01:16:13 25 4
gpt4 key购买 nike

我需要使用 ASP.NET Core 创建压缩操作过滤器

我找到了一些 MVC 5 的示例,例如:

public class CompressAttribute : ActionFilterAttribute   {

public override void OnActionExecuting(ActionExecutingContext filterContext)
{

var encodingsAccepted = filterContext.HttpContext.Request.Headers["Accept-Encoding"];
if (string.IsNullOrEmpty(encodingsAccepted)) return;

encodingsAccepted = encodingsAccepted.ToLowerInvariant();
var response = filterContext.HttpContext.Response;

if (encodingsAccepted.Contains("deflate"))
{
response.AppendHeader("Content-encoding", "deflate");
response.Filter = new DeflateStream(response.Filter, CompressionMode.Compress);
}
else if (encodingsAccepted.Contains("gzip"))
{
response.AppendHeader("Content-encoding", "gzip");
response.Filter = new GZipStream(response.Filter, CompressionMode.Compress);
}
}

但是当我尝试将它与

一起使用时
using Microsoft.AspNet.Http;

根本没用:

using System;
using System.Collections.Generic;
using System.IO;
using System.IO.Compression;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNet.Http;
using Microsoft.AspNet.Mvc.Filters;
using Microsoft.Extensions.Primitives;

namespace App.Filterss
{
public class CompressionFilter : ActionFilterAttribute
{
public override void OnActionExecuting(ActionExecutingContext context)
{
HttpRequest request = context.HttpContext.Request;

string acceptEncoding = request.Headers["Accept-Encoding"];

if (string.IsNullOrEmpty(acceptEncoding)) return;

acceptEncoding = acceptEncoding.ToUpperInvariant();

HttpResponse response = context.HttpContext.Response;

if (acceptEncoding.Contains("GZIP"))
{
response.Headers.Add("Content-Encoding", "gzip");
response.Body = new GZipStream(response.Body, CompressionMode.Compress);
}
else if (acceptEncoding.Contains("DEFLATE"))
{
response.Headers.Add("Content-encoding", "deflate");
response.Body = new DeflateStream(response.Body, CompressionMode.Compress);
}
}
}
}

我只收到 200 个没有任何内容的 http 响应。

谁能告诉我如何使用过滤器执行压缩?

最佳答案

这是 ASP.net Core 1.1 的新功能。

这是您需要的软件包。 https://www.nuget.org/packages/Microsoft.AspNetCore.ResponseCompression/

这里有一些微软官方视频展示了如何使用它: https://youtu.be/IfLg6LQCl-Y?t=223

一些背景资料: https://github.com/aspnet/BasicMiddleware/issues/34

代码:

项目.json:

"dependencies": {
...,
"Microsoft.AspNetCore.ResponseCompression": "1.0.0"
}

启动.cs:

public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
...
//Add Middleware
app.UseResponseCompression();

....
}

public void ConfigureServices(IServiceCollection services)
{
//Configure Compression level
services.Configure<GzipCompressionProviderOptions>(options => options.Level = CompressionLevel.Fastest);

//Add Response compression services
services.AddResponseCompression(options =>
{
options.Providers.Add<GzipCompressionProvider>();
});
}

关于c# - 压缩 Action 过滤器 ASP.NET Core,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35899772/

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