HttpModule 实现 ASP.Net (*.aspx) 中文简繁体的自动转换,不用修改原有的任何代码,直接部署即可!

转自:http://www.cnblogs.com/Microshaoft/archive/2005/12/03/289665.html

 

从8月份忙到现在还没忙完,还得再坚持几个月!
一直没时间更新blog,今天收到一封回复我以前的一篇blog的邮件,提醒了我!
http://Microshaoft.cnblogs.com/archive/2005/03/22/123365.aspx#288944
于是根据该网友的建议:
用 HttpModule 实现了 ASP.Net (*.aspx) 中文简繁体的自动转换!
思路相当简单!
Global.asax 的 Codebehind 的 Application_BeginRequest 的事件处理函数也应可以实现!
HttpHandler 是不能实现的,因为它是"截流"!


效果不错!可以处理任意 ASP.Net 站点、虚拟目录!不用修改原有的任何代码!
代码如下:
StrConvHttpModule.cs

/*
csc.exe /t:library StrConvHttpModule.cs /r:C:/windows/Microsoft.NET/Framework/v1.1.4322/Microsoft.VisualBasic.dll 
*/

namespace  Microshaoft.HttpModules
{
    
using System;
    
using System.Web; 
    
using System.Collections;

    
using Microshaoft.IO;

    
public class StrConvHttpModule : IHttpModule
    
{
        
public string ModuleName
        
{
            
get
            
{
                
return "StrConvHttpModule";
            }

        }


        
public void Init(HttpApplication application)
        
{
            application.BeginRequest 
+= (new EventHandler(this.Application_BeginRequest));
        }

        
        
private void Application_BeginRequest(object sender, EventArgs e)
        
{
            HttpApplication application 
= (HttpApplication) sender;
            HttpContext context 
= application.Context;
            context.Response.Filter 
= new StrConvFilterStream(context.Response.Filter);
        }


        
public void Dispose()
        
{
        }

    }

}


namespace  Microshaoft.IO
{
    
using System;
    
using System.IO;
    
using System.Web;
    
using System.Text;
    
using System.Globalization;

    
using Microsoft.VisualBasic;

    
public class StrConvFilterStream : Stream
    
{
        
private Stream _sink;
        
private long _position;

        
public StrConvFilterStream(Stream sink)
        
{
            
this._sink = sink;
        }


        
public override bool CanRead
        
{
            
get
            
{
                
return true;
            }

        }


        
public override bool CanSeek
        
{
            
get
            
{
                
return true;
            }

        }


        
public override bool CanWrite
        
{
            
get
            
{
                
return true;
            }

        }


        
public override long Length
        
{
            
get
            
{
                
return 0;
            }

        }


        
public override long Position
        
{
            
get
            
{
                
return this._position;
            }

        
set
            
{
                
this._position = value;
            }

        }


        
public override long Seek(long offset, SeekOrigin direction)
        
{
            
return this._sink.Seek(offset, direction);
        }


        
public override void SetLength(long length)
        
{
            
this._sink.SetLength(length);
        }


        
public override void Close()
        
{
            
this._sink.Close();
        }


        
public override void Flush()
        
{
            
this._sink.Flush();
        }


        
public override int Read(byte[] buffer, int offset, int count)
        
{
            
return this._sink.Read(buffer, offset, count);
        }


        
public override void Write(byte[] buffer, int offset, int count)
        
{
            
if (HttpContext.Current.Response.ContentType == "text/html")
            
{
                Encoding e 
= Encoding.GetEncoding(HttpContext.Current.Response.Charset);
                
string s = e.GetString(buffer, offset, count);
                s 
= Strings.StrConv(s, VbStrConv.TraditionalChinese, CultureInfo.CurrentCulture.LCID);
                
this._sink.Write(e.GetBytes(s), 0, e.GetByteCount(s));
            }

            
else
            
{
                
this._sink.Write(buffer, offset, count);
            }

        }

    }

}


将 StrConvHttpModule.cs 编译为 StrConvHttpModule.dll:
csc.exe /t:library StrConvHttpModule.cs /r:C:/windows/Microsoft.NET/Framework/v1.1.4322/Microsoft.VisualBasic.dll

以 Microsoft .NET Framework SDK 自带的  QuickStart 教程站点为例
http://localhost/quickstart/
修改 quickstart 虚拟目录下的 web.config, 在 <system.web>...</system.web> 区域添加如下配置节:

     < httpModules >
        
< add  name ="StrConvHttpModule"  type ="Microshaoft.HttpModules.StrConvHttpModule, StrConvHttpModule"   />
    
</ httpModules >



将 StrConvHttpModule.dll 复制到 该虚拟目录的 bin/ 目录下
,以及该虚拟目录下的各级子虚拟目录下的 bin/ 目录下

收功!

20100522更新: 解决了几个bug iweb Shop 基于iweb SI框架开发,在获得iweb SI技术平台库支持的条件下,iweb Shop 可以轻松满足用户量级百万至千万级的大型电子商务网站的性能要求。站点的集群与分布式技术(分布式计算与存储/高可用性/负载均衡)被屏蔽在SI平台之内,基于iweb Shop 并且按照SI平台库扩展规范开发的新增功能模块,也将同时获得这种超级计算与处理的能力。 iweb Shop 性能卓越,功能与应用丰富多样,优秀的可扩展和伸缩能力使它可方便构建B2B,C2C,B2C领域的大型站点。 作为开源的LAMP电子商务系统,iweb Shop 提供了一套轻量级的支持库,这使iweb Shop 可以轻松部署在虚拟主机上或者单台服务器上。 iweb Shop 具有以下特点: 1.易于集成 iweb Shop 设计灵活,具有模块化架构体系和丰富的功能。易于与第三方应用系统无缝集成。 2.性能与容量扩展 SI库管理的集群支持节点热插拔,当系统需要增加集群中的Web服务节点或者数据存储节点时只需要更改SI库的配置文件,无须编写任何代码就可以轻松管理新增流量和数据。 3.多领域的应用 其面向企业级应用,可处理多方面的需求,建站者可以用iweb Shop 轻松建设一个多种用途和多领域的电子商务网站。 4.国际化支持,UTF-8编码,多种语言包支持。 5.UI兼容ie6、ie7、ie8、ff等主流浏览器。 iweb Shop 的功能包括: 1. 网站管理 2. 店铺及供应商管理 (单店系统不包含该功能) 3. 促销与商品推荐 4. 商品展示 5. 商品分类管理 6. 商品分类检索 7. 用户中心 8. 客户服务 9. 支付管理 10. 结账方式 11. 物流管理 12. SEO搜索引擎优化 13. 分析和报表 iweb Mall v0.9的新增功能与问题修复 1. 增加邮件模板管理 2. 完成语言包功能 3. 增加找回密码功能 4. 修复高级搜索省市选择问题 5. 修复注册时用户名过滤问题 6. 增加会员锁定功能 7. 增加新的url重写功能,针对服务器不支持rewrite的主机 8. 修复广告的删除问题 9. 增加时区设置功能 后台用户名密码admin
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值