您的位置:首页 > 理论基础 > 计算机网络

Asp.Net Core 自定义设置Http缓存处理

2018-05-16 17:52 1026 查看

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

输出前自定义指定响应头

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<OuterImgMiddleware>();
}
}

 

 

更多:

Http缓存机制(转)

分块编码(Transfer-Encoding: chunked)(转)

ASP.NET Core -中间件(Middleware)使用

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: