博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Asp.Net Core 自定义设置Http缓存处理
阅读量:5144 次
发布时间:2019-06-13

本文共 2144 字,大约阅读时间需要 7 分钟。

一、使用中间件 拦截请求自定义输出文件

输出前自定义指定响应头

public class OuterImgMiddleware    {        public static string RootPath { get; set; } //配置文件读取绝对位置        private readonly RequestDelegate _next;        public OuterImgMiddleware(RequestDelegate next, IHostingEnvironment env)        {            _next = next;        }        public async Task Invoke(HttpContext context)        {            var path = context.Request.Path.ToString();            var headersDictionary = context.Request.Headers;            if (context.Request.Method == "GET")                if (!string.IsNullOrEmpty(path) && path.Contains("/upload/logo"))                {                    var unauthorizedImagePath = RootPath + path;                    context.Response.ContentType = "image/jpeg";                    context.Response.Headers["Cache-Control"] = "public"; //指定客户端,服务器都处理缓存                    int length = path.LastIndexOf(".") - path.LastIndexOf("/") - 1;                    context.Response.Headers["Etag"] = path.Substring(path.LastIndexOf("/") + 1, length);                    context.Response.Headers["Last-Modified"] = new DateTime(2018).ToString("r");                    FileInfo file = new FileInfo(unauthorizedImagePath);                    context.Response.Headers["Content-Length"] = file.Length.ToString();                    context.Response.Headers["Accept-Ranges"] = "bytes";                    //如果Transfer-Encoding =chunked 没有指定的话,SendFile 前台解析事变                    //指定Content-Length 可以是 chunked 分块实效                    //context.Response.Headers["Transfer-Encoding"] = "";                    //Http 1.0 是使用Expires 属性                    //context.Response.Headers["Expires"] = DateTime.Now.AddMonths(1).ToString("r");                    await context.Response.SendFileAsync(unauthorizedImagePath);                    return;                }            await _next(context);        }    }    public static class MvcExtensions    {        public static IApplicationBuilder UseOutImg(this IApplicationBuilder builder)        {            return builder.UseMiddleware
(); } }

 

 

更多:

转载于:https://www.cnblogs.com/tianma3798/p/9047262.html

你可能感兴趣的文章
自定义带下划线文本的UIButton
查看>>
校园跳蚤市场-Sprint计划(第二阶段)
查看>>
1.字符串池化(intern)机制及拓展学习
查看>>
B/S架构和C/S架构
查看>>
Set Matrix Zeroes
查看>>
10. 星际争霸之php设计模式--原型模式
查看>>
jar中没有主清单属性【解决办法】
查看>>
UESTC--1251--谕神的密码(贪心)
查看>>
【转载】什么是Web Service
查看>>
05-集合框架区别以及性能测试
查看>>
缓存穿透,缓存击穿,缓存雪崩解决方案分析
查看>>
SA学习笔记
查看>>
vue 使用 computed 结合 filter 实现数据的的过滤和排序
查看>>
深入理解Java内存模型(三)——顺序一致性
查看>>
struts2文件上传时获取上传文件的大小
查看>>
冒泡排序的个人理解
查看>>
轮播图
查看>>
)C# Enum,Int,String的互相转换 枚举转换
查看>>
laravel 没有route.php,关于Laravel Route重定向的一个注意点
查看>>
mysql中没有join吗,mysql – SQL Join,包括表a中的行,表b中没有匹配项
查看>>