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

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);
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: