【发布时间】:2016-06-24 07:27:25
【问题描述】:
我需要使用 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 响应。
谁能提示我如何使用过滤器进行压缩?
【问题讨论】:
-
你没有调用基本方法:
base.OnActionExecuted(context); -
一点用都没有。
标签: c# filter compression asp.net-core