jim*_*lan 87
这是我使用的(在这个时间段):
using System.IO.Compression;
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);
}
}
}
Run Code Online (Sandbox Code Playgroud)
控制器中的用法:
[Compress]
public class BookingController : BaseController
{...}
Run Code Online (Sandbox Code Playgroud)
还有其他的变化,但这很有效.(顺便说一下,我使用BaseController上的[Compress]属性来保存项目中的重复,而上面的操作是在控制器的基础上进行的.
[编辑]如上文所述.为了简化使用,您还可以[Compress]在BaseController本身中包含oneshot,从而每个继承的子控制器默认访问该功能:
[Compress]
public class BaseController : Controller
{...}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
20384 次 |
| 最近记录: |