ASP.NET MVC用IHttpModule修改response的html实现压缩或者转繁体,IHttpModule用后台代码注册
2017-09-21 13:54
766 查看
代码里面实现了html里面中文简体转繁体,用的微软自带的简繁体类库操作,效率高。在FilterStream中,Write方法里面还可以实现压缩html
实现IhttpModule操作模块
using System;
using System.Web;
namespace OverrideRender.Models
{
public class MyHttpModule : IHttpModule
{
void IHttpModule.Dispose()
{
//throw new NotImplementedException();
}
void IHttpModule.Init(HttpApplication context)
{
context.BeginRequest += Context_BeginRequest;
}
private void Context_BeginRequest(object sender, EventArgs e)
{
HttpContext.Current.Response.Filter = new FilterStream(HttpContext.Current.Response.Filter);
}
}
}
注册MyHttpModule,此方式注册不需要在Global.asax中注册即可生效,此类在程序注册所有Modules模块前注册到模块集合中,所以能生效
using Microsoft.Web.Infrastructure.DynamicModuleHelper;
using System.Web;
[assembly: PreApplicationStartMethod(typeof(OverrideRender.Models.PreApplicationStartRegist), "PreStart")]
namespace OverrideRender.Models
{
public class PreApplicationStartRegist
{
private static bool hasLoaded;
public static void PreStart()
{
if (!hasLoaded)
{
hasLoaded = true;
//动态注册操作模块
DynamicModuleUtility.RegisterModule(typeof(MyHttpModule));
}
}
}
}
继承Stream,改写类,使能操作html,改写html关键类
using Microsoft.VisualBasic;
using System.IO;
using System.Text;
namespace OverrideRender.Models
{
public class FilterStream : Stream
{
private Stream _sm;
public FilterStream(Stream stream)
{
_sm = stream;
}
public override bool CanRead
{
get
{
return true;
}
}
public override bool CanSeek
{
get
{
return true;
}
}
public override bool CanWrite
{
get
{
retur
e1b8
n true;
}
}
public override long Length
{
get
{
return _sm.Length;
}
}
public override long Position
{
get
{
return _sm.Position;
}
set
{
_sm.Position = value;
}
}
public override void Flush()
{
_sm.Flush();
}
public override int Read(byte[] buffer, int offset, int count)
{
return _sm.Read(buffer, offset, count);
}
public override long Seek(long offset, SeekOrigin origin)
{
return _sm.Seek(offset, origin);
}
public override void SetLength(long value)
{
_sm.SetLength(value);
}
/// <summary>
/// 获取到响应输出流的html文本,并修改html
/// </summary>
/// <param name="buffer"></param>
/// <param name="offset"></param>
/// <param name="count"></param>
public override void Write(byte[] buffer, int offset, int count)
{
//取得返回到浏览器的html
string html = Encoding.UTF8.GetString(buffer);
//将html里面的简体中文转换为繁体
string tHtml = Microsoft.VisualBasic.Strings.StrConv(html, VbStrConv.TraditionalChinese, 0);
//覆盖原html,载入修改后的html
byte[] buff = Encoding.UTF8.GetBytes(tHtml);
_sm.Write(buff, 0, buff.Length);
}
}
}
实现IhttpModule操作模块
using System;
using System.Web;
namespace OverrideRender.Models
{
public class MyHttpModule : IHttpModule
{
void IHttpModule.Dispose()
{
//throw new NotImplementedException();
}
void IHttpModule.Init(HttpApplication context)
{
context.BeginRequest += Context_BeginRequest;
}
private void Context_BeginRequest(object sender, EventArgs e)
{
HttpContext.Current.Response.Filter = new FilterStream(HttpContext.Current.Response.Filter);
}
}
}
注册MyHttpModule,此方式注册不需要在Global.asax中注册即可生效,此类在程序注册所有Modules模块前注册到模块集合中,所以能生效
using Microsoft.Web.Infrastructure.DynamicModuleHelper;
using System.Web;
[assembly: PreApplicationStartMethod(typeof(OverrideRender.Models.PreApplicationStartRegist), "PreStart")]
namespace OverrideRender.Models
{
public class PreApplicationStartRegist
{
private static bool hasLoaded;
public static void PreStart()
{
if (!hasLoaded)
{
hasLoaded = true;
//动态注册操作模块
DynamicModuleUtility.RegisterModule(typeof(MyHttpModule));
}
}
}
}
继承Stream,改写类,使能操作html,改写html关键类
using Microsoft.VisualBasic;
using System.IO;
using System.Text;
namespace OverrideRender.Models
{
public class FilterStream : Stream
{
private Stream _sm;
public FilterStream(Stream stream)
{
_sm = stream;
}
public override bool CanRead
{
get
{
return true;
}
}
public override bool CanSeek
{
get
{
return true;
}
}
public override bool CanWrite
{
get
{
retur
e1b8
n true;
}
}
public override long Length
{
get
{
return _sm.Length;
}
}
public override long Position
{
get
{
return _sm.Position;
}
set
{
_sm.Position = value;
}
}
public override void Flush()
{
_sm.Flush();
}
public override int Read(byte[] buffer, int offset, int count)
{
return _sm.Read(buffer, offset, count);
}
public override long Seek(long offset, SeekOrigin origin)
{
return _sm.Seek(offset, origin);
}
public override void SetLength(long value)
{
_sm.SetLength(value);
}
/// <summary>
/// 获取到响应输出流的html文本,并修改html
/// </summary>
/// <param name="buffer"></param>
/// <param name="offset"></param>
/// <param name="count"></param>
public override void Write(byte[] buffer, int offset, int count)
{
//取得返回到浏览器的html
string html = Encoding.UTF8.GetString(buffer);
//将html里面的简体中文转换为繁体
string tHtml = Microsoft.VisualBasic.Strings.StrConv(html, VbStrConv.TraditionalChinese, 0);
//覆盖原html,载入修改后的html
byte[] buff = Encoding.UTF8.GetBytes(tHtml);
_sm.Write(buff, 0, buff.Length);
}
}
}
相关文章推荐
- HttpModule 实现 ASP.Net (*.aspx) 中文简繁体的自动转换,不用修改原有的任何代码,直接部署即可!
- HttpModule 实现 ASP.Net (*.aspx) 中文简繁体的自动转换,不用修改原有的任何代码,直接部署即可!
- HttpModule 实现 ASP.Net (*.aspx) 中文简繁体的自动转换,不用修改原有的任何代码,直接部署即可!
- ASP.Net 重写IHttpModule 来拦截 HttpApplication 实现HTML资源压缩和空白过滤
- Asp.net使用HttpModule压缩并删除空白Html请求
- ASP.NET C# 用后台代码实现 跨域名访问 返回HTML代码
- ASP.NET下利用HttpModule实现简体中文向繁体中文的自动转换
- ASP.NET使用HttpModule压缩并删除空白Html请求
- Asp.net使用HttpModule压缩并删除空白Html请求
- Asp.net使用HttpModule压缩并删除空白Html请求
- Asp.net使用HttpModule压缩并删除空白Html请求
- asp.net 使用HttpModule对全站输出的动态页面的HTML内容进行修改,不会错乱
- Asp.net使用HttpModule压缩并删除空白Html请求
- [ASP]无限级分类的简单算法实现及代码重点讲解http://bbs.blueidea.com/thread-1982151-1-1.html
- ASP.NET 2.0 HttpHandler实现生成图片验证码(示例代码下载)
- ASP.NET 2.0 HttpHandler实现对某种文件类型权限保护(示例代码下载)
- asp.net下利用JS实现对后台CS代码的调用方法