码迷,mamicode.com
首页 > Windows程序 > 详细

C# ETagCacheMiddleware

时间:2020-01-09 13:23:20      阅读:88      评论:0      收藏:0      [点我收藏+]

标签:private   await   项目   sci   readonly   red   only   redis   tty   

 

记录下之前项目写的etag。

 

 public class ETagCacheMiddleware
    {
        private readonly RequestDelegate _next;

        public ETagCacheMiddleware(RequestDelegate next)
        {
            _next = next;
        }

        public async Task InvokeAsync(HttpContext context)
        {
            var originalResponseStream = context.Response.Body;
            var etag = "";
            if (context.Request.Headers.ContainsKey("etag"))
            {
                etag = context.Request.Headers["etag"].ToString();
                var response = await _redisCacheClient.Value.GetOrDefault<string>(etag);

                if (response == null)
                {
                    using (var ms = new MemoryStream())
                    {
                        context.Response.Body = ms;
                        context.Response.Headers.Add("etag", etag);
                        await _next(context);

                        ms.Seek(0,SeekOrigin.Begin);

                        var responseReader = new StreamReader(ms);
                        var responseContent = responseReader.ReadToEnd();

                        ms.Seek(0, SeekOrigin.Begin);

                        await ms.CopyToAsync(originalResponseStream);
                        context.Response.Body = originalResponseStream;
              
              //可根据具体需求操作已获得的etag和请求返回内容responseContent
} }
else { //返回response context.Response.Headers.Add("etag",etag); context.Response.ContentType = "application/json"; using (var ms = new MemoryStream()) { var orgBodyStream = context.Response.Body; context.Response.Body = ms; ms.Seek(0, SeekOrigin.Begin); byte[] responseArray = Encoding.ASCII.GetBytes(response); ms.Write(responseArray, 0, responseArray.Length); ms.Seek(0, SeekOrigin.Begin); await ms.CopyToAsync(orgBodyStream); context.Response.Body = orgBodyStream; } } } else { await _next(context); } } }

 

C# ETagCacheMiddleware

标签:private   await   项目   sci   readonly   red   only   redis   tty   

原文地址:https://www.cnblogs.com/yuerduo/p/12170639.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!