//using Microsoft.AspNetCore.Builder; //using Microsoft.AspNetCore.Http; //using System; //using System.Collections.Generic; //using System.IO; //using System.Linq; //using System.Text; //using System.Threading.Tasks; //namespace CC.ElectronicCommerce.WebCore.MiddlewareExtend //{ // /// // /// 支持在返回HTML时,将返回的Stream保存到指定目录 // /// // public class StaticPageMiddleware // { // private readonly RequestDelegate _next; // private string _directoryPath = @"D:/cc-ec/"; // private bool _supportDelete = false; // private bool _supportWarmup = false; // public StaticPageMiddleware(RequestDelegate next, string directoryPath, bool supportDelete, bool supportWarmup) // { // this._next = next; // this._directoryPath = directoryPath; // this._supportDelete = supportDelete; // this._supportWarmup = supportWarmup; // } // public async Task InvokeAsync(HttpContext context) // { // if (this._supportDelete && "Delete".Equals(context.Request.Query["ActionHeader"])) // { // this.DeleteHmtl(context.Request.Path.Value); // context.Response.StatusCode = 200; // } // else if (this._supportWarmup && "ClearAll".Equals(context.Request.Query["ActionHeader"])) // { // this.ClearDirectory(10);//考虑数据量 // context.Response.StatusCode = 200; // } // else if (!context.Request.IsAjaxRequest()) // { // Console.WriteLine($"This is StaticPageMiddleware InvokeAsync {context.Request.Path.Value}"); // #region context.Response.Body // var originalStream = context.Response.Body; // using (var copyStream = new MemoryStream()) // { // context.Response.Body = copyStream; // await _next(context); // copyStream.Position = 0; // var reader = new StreamReader(copyStream); // var content = await reader.ReadToEndAsync(); // string url = context.Request.Path.Value; // this.SaveHmtl(url, content); // copyStream.Position = 0; // await copyStream.CopyToAsync(originalStream); // context.Response.Body = originalStream; // } // #endregion // } // else // { // await _next(context); // } // } // private void SaveHmtl(string url, string html) // { // try // { // //Console.WriteLine($"Response: {html}"); // if (string.IsNullOrWhiteSpace(html)) // return; // if (!url.EndsWith(".html")) // return; // if (Directory.Exists(_directoryPath) == false) // Directory.CreateDirectory(_directoryPath); // var totalPath = Path.Combine(_directoryPath, url.Split("/").Last()); // File.WriteAllText(totalPath, html);//直接覆盖 // } // catch (Exception ex) // { // Console.WriteLine(ex.Message); // } // } // /// // /// 删除某个页面 // /// // /// // /// // private void DeleteHmtl(string url) // { // try // { // if (!url.EndsWith(".html")) // return; // var totalPath = Path.Combine(_directoryPath, url.Split("/").Last()); // File.Delete(totalPath);//直接删除 // } // catch (Exception ex) // { // Console.WriteLine($"Delete {url} 异常,{ex.Message}"); // } // } // /// // /// 清理文件,支持重试 // /// // /// 最多重试次数 // private void ClearDirectory(int index) // { // if (index > 0)//简陋版---重试index次 // { // try // { // var files = Directory.GetFiles(_directoryPath); // foreach (var file in files) // { // File.Delete(file); // } // } // catch (Exception ex) // { // Console.WriteLine($"ClearDirectory failed {ex.Message}"); // ClearDirectory(index--); // } // } // } // } // /// // /// 扩展中间件 // /// // public static class StaticPageMiddlewareExtensions // { // /// // /// // /// // /// // /// 文件写入地址,文件夹目录 // /// 是否支持删除 // /// 是否支持全量删除 // /// // public static IApplicationBuilder UseStaticPageMiddleware(this IApplicationBuilder app, string directoryPath, bool supportDelete, bool supportClear) // { // return app.UseMiddleware(directoryPath, supportDelete, supportClear); // } // } //}