`

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

    博客分类:
  • C#
阅读更多
用 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 zhutou.HttpModules
{
    using System;
    using System.Web; 
    using System.Collections;

    using zhutou.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 StrConvFilter(context.Response.Filter);
        }

        public void Dispose()
        {
        }
    }
}

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

    using Microsoft.VisualBasic;

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

        public StrConvFilter(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="zhutou.HttpModules.StrConvHttpModule, StrConvHttpModule" />
    </httpModules>


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

OK
分享到:
评论

相关推荐

    介绍Asp.net HttpModule

    在Asp.Net应用程序中,`App_Code`文件夹通常用于放置自定义的代码类库,这些类库可能包含了自定义的HttpModule实现。`App_Data`文件夹则常用于存储应用程序的数据,如数据库文件或XML文件。 在实际项目中,...

    Asp.net汉字转拼音源码

    【Asp.net汉字转拼音源码】是一种在Asp.Net平台上实现的功能,它允许程序将汉字转换为其对应的拼音表示,这对于搜索引擎优化(SEO)、中文排序、关键字分析等场景非常有用。Asp.Net是Microsoft开发的一个用于构建Web...

    ASP.NET架构详解HttpHandler和HttpModule高清PDF文字版

    ASP.NET是微软开发的一种用于构建Web应用程序的框架,它提供了丰富的功能和工具,使得开发者能够高效地构建动态网站和Web服务。在这个主题中,我们将深入探讨ASP.NET架构中的两个关键组件:HttpHandler和HttpModule...

    RadControls.for.ASP.NET2.Q1.2007.SP2.RadUpload.Net2.v2.3.2.0

    a highly efficient proprietary HttpModule, which enables uploading of files with size up to 2GB, while allocating a minimum amount of server memory. UI control for single- and multi-file uploads, ...

    asp.net 实现对url的重写

    ASP.NET URL重写是Web开发中的一个重要技术,它允许开发者改变URL的结构,使其更加用户友好,搜索引擎优化(SEO)友好,并能增强网站的安全性。本文将深入探讨ASP.NET URL重写的核心概念、优势以及如何实现。 **1. ...

    asp.net用url重写URLReWriter实现任意二级域名 高级篇.docx

    2. **代码实现**:可能需要对URLReWriter的源码进行修改,以适应特定的URL处理需求。 **注意事项** 1. **配置正确性**:确保Web.config中的HttpModule配置正确无误,避免导致应用无法启动。 2. **测试全面**:对...

    2.ASP.NET.2.0.高级编程(第4版) [1/7]

    2.ASP.NET.2.0.高级编程(第4版) [1/7] 原书名: Professional ASP.NET 2.0 原出版社: Wrox 作者:(美)Bill Evjen, Scott Hanselman, Farhan Muhammad [同作者作品] [作译者介绍] 译者: 李敏波[同译者作品] ...

    ASP.NET生成静态网页

    - **编译阶段**: ASP.NET首先会编译所有的ASPX页面和相关代码-behind文件(如Default.aspx.cs)。这将生成IL(中间语言),然后由.NET Framework的Just-In-Time (JIT)编译器将其转换为机器码。 - **HTML渲染**: 当...

    asp.net网络技术

    1. **ASP.NET架构**:ASP.NET框架包括几个关键组件,如ASP.NET页面生命周期、HttpApplication、HttpModule和HttpHandler。页面生命周期管理着从请求到达服务器到响应返回客户端的整个过程,包括初始化、加载、验证、...

    Professional ASP.NET Design Patterns .pdf

    《Professional ASP.NET Design Patterns》是一本深入探讨ASP.NET开发中设计模式的专业书籍。设计模式是软件工程中的宝贵经验总结,是解决常见问题的有效模板。在ASP.NET开发中,理解并运用设计模式能提升代码质量、...

    asp.net设计模式源代码

    ASP.NET设计模式源代码是关于使用ASP.NET框架实现经典设计模式的实例集合。这些源代码文件,如ASPPatternsc02.zip至ASPPatternsc12.zip,提供了丰富的实践示例,帮助开发者深入理解如何在实际项目中应用设计模式。...

    ASP.NET转静态页面

    2. **自动生成**:在ASP.NET应用中,可以编写自定义的HttpHandler或HttpModule,在页面请求时实时生成HTML并缓存,下次请求时直接返回缓存的HTML,实现类似静态的效果。 3. **工具自动化**:有一些第三方工具或库,...

    rss.rar_ RSS asp.net_RSS asp.net_asp.net_asp.net rss_rss asp.n

    标题中的“rss.rar_ RSS asp.net_RSS asp.net_asp.net_asp.net rss_rss asp.n”暗示这是一个关于使用ASP.NET实现RSS(Really Simple Syndication)功能的压缩包资源。RSS是一种用于发布和订阅网站内容的XML格式,常...

    asp.net生成静态页面源码例子打包下载

    ASP.NET 是微软公司推出的一种基于.NET Framework的Web应用程序开发平台,它允许开发人员使用各种编程语言(如C#、VB.NET)构建动态网站、Web应用和Web服务。在这个"asp.net生成静态页面源码例子打包下载"中,我们...

    测试代码:Asp.Net底层解析(四)——应用程序生命周期与HttpModule

    通过阅读并分析“Dragon_HttpModule”测试代码,我们可以更深入地了解如何利用HttpModule来实现各种功能,如日志记录、URL重定向、用户认证等,从而提升我们的Asp.Net应用程序的功能性和可维护性。在实践中,不断...

    ASP.NET经典小案例

    ASP.NET是微软公司推出的一种基于.NET Framework的Web应用程序开发平台,它为开发者提供了构建动态、数据驱动的Web应用的强大工具和框架。在这个"ASP.NET经典小案例"中,我们可以期待学习到一系列实用的编程技巧和...

    ASP.NET动态页面静态化代码

    ASP.NET中,可以使用HttpHandler或HttpModule来实现页面静态化。例如,创建一个HttpHandler,检测请求的URL是否对应已生成的静态HTML,如果存在则直接返回,否则动态生成并保存为静态文件。 6. **注意事项**: - ...

    ASP.NET源码——Asp.net根据IP显示省市拼音.zip

    这个压缩包“ASP.NET源码——Asp.net根据IP显示省市拼音.zip”提供了一个示例,演示了如何在ASP.NET环境中通过用户的IP地址获取并显示其所在的省市拼音。 在 ASP.NET 中实现这一功能,主要涉及到以下几个关键知识点...

    ASP.NET 编程模型介绍

    ASP.NET 编程模型是微软开发的Web应用程序框架的核心组成部分,它定义了处理客户端请求的整个生命周期。在ASP.NET中,编程模型主要包括HttpApplication、HttpModule、HttpHandler和相关事件的执行顺序。以下是对这些...

Global site tag (gtag.js) - Google Analytics