asp.net mvc静态化
- public class StaticFileFilterAttribute : FilterAttribute, IResultFilter
- {
- public void OnResultExecuted(ResultExecutedContext filterContext)
- {
- filterContext.HttpContext.Response.Filter = new StaticFileWriteResponseFilterWrapper(filterContext.HttpContext.Response.Filter, filterContext);
- }
- public void OnResultExecuting(ResultExecutingContext filterContext)
- {
- }
- class StaticFileWriteResponseFilterWrapper : System.IO.Stream
- {
- private string path = "";
- private bool cached = false;
- private System.IO.Stream inner;
- private ControllerContext context;
- public StaticFileWriteResponseFilterWrapper(System.IO.Stream s, ControllerContext context)
- {
- this.inner = s;
- this.context = context;
- this.path = context.HttpContext.Server.MapPath(HttpContext.Current.Request.Path);
- }
- public override bool CanRead
- {
- get { return inner.CanRead; }
- }
- public override bool CanSeek
- {
- get { return inner.CanSeek; }
- }
- public override bool CanWrite
- {
- get { return inner.CanWrite; }
- }
- public override void Flush()
- {
- if (cached == false)
- {
- File.AppendAllText(path, "\r\n<!--cache by filter at " + DateTime.Now.ToString() + "-->");
- cached = true;
- }
- inner.Flush();
- }
- public override long Length
- {
- get { return inner.Length; }
- }
- public override long Position
- {
- get
- {
- return inner.Position;
- }
- set
- {
- inner.Position = value;
- }
- }
- public override int Read(byte[] buffer, int offset, int count)
- {
- return inner.Read(buffer, offset, count);
- }
- public override long Seek(long offset, System.IO.SeekOrigin origin)
- {
- return inner.Seek(offset, origin);
- }
- public override void SetLength(long value)
- {
- inner.SetLength(value);
- }
- public override void Write(byte[] buffer, int offset, int count)
- {
- inner.Write(buffer, offset, count);
- try
- {
- if (Path.HasExtension(path))
- {
- string dir = Path.GetDirectoryName(path);
- if (!Directory.Exists(dir))
- {
- Directory.CreateDirectory(dir);
- }
- //if (File.Exists(p))
- //{
- // File.Delete(p);
- //}
- File.AppendAllText(path, System.Text.Encoding.UTF8.GetString(buffer, offset, count));
- }
- }
- catch (Exception ex)
- {
- }
- }
- }
- }
- <system.webServer>
- <validation validateIntegratedModeConfiguration="false" />
- <modules runAllManagedModulesForAllRequests="false" />
- <handlers>
- ...
- <add name="htmlHandler" verb="GET,HEAD" path="*.html" type="System.Web.StaticFileHandler"/>
- </handlers>
- </system.webServer>
============ 欢迎各位老板打赏~ ===========
与本文相关的文章
- · The instance of entity type ‘Customer’ cannot be tracked because another instance with the same key value for {‘Id’} is already being tracked.
- · .NET8实时更新nginx ip地址归属地
- · 解决.NET Blazor子组件不刷新问题
- · .NET8如何在普通类库中引用 Microsoft.AspNetCore
- · .NET8 Mysql SSL error
- · ASP.NET Core MVC的Razor视图渲染中文乱码的问题
- · .NETCORE 依赖注入服务生命周期
- · asp.net zero改mysql
- · .NET5面试汇总
- · .Net连接Mysql数据库的Convert Zero Datetime日期问题
- · vue使用element-ui中的Message 、MessageBox 、Notification
- · Asp.Net Core Filter 深入浅出的那些事-AOP