【软,码】.NET内容协商模块

来源:互联网 发布:去弹窗软件 编辑:程序博客网 时间:2024/05/01 23:53
为了让我们编写的符合W3C标准的网站精确地服务于客户,我们常常需要根据客户使用的浏览器代理类型向客户发送不同的Content-Type类型。要做到这一点,方案有多种。比较简单的是在页面逻辑中判断客户代理的支持类型,然后发送。可是因为这种方案需要在每一个页中都进行这样的判断,这简单也不过是“所谓的”简单罢了。从微软的技术文章中,我找到了一个解决方案,就是使用HttpModule技术。微软的文章里建议在Application的PreSendRequestHeaders事件处理程序中进行这样的处理,但是经过实践,这并不好用:虽然发送到客户端的Header的确是按照预先的处理进行的,可是如果要使用Response.ContentType自定义aspx文件中的<meta />(即使用<meta http-equiv="Content-Type" content="<%= Response.ContentType %>; charset=utf-8" />)根本做不到,页面中仍然使用默认的text/html作为ContentType。

  于是我把对ContentType的处理提前,放到Application的PreRequestHandlerExecute事件处理程序中,于是一切搞定!

  下面是该部分程序的源代码。

class ContentTypeNegotiationModule : System.Web.IHttpModule
    
{
        
public ContentTypeNegotiationModule()
        
{
        }

        
        
IHttpModule 成员

        
Application Events handlers
    }

  为了减少朋友们重复开发,我把整个模块的源代码以及DLL文件上传到了我的资源里,朋友们可以放心使用。

  【使用方法】

        1)在web.config文件中添加如下指令:

       <httpModules>
            <add type="RedFishX.Web.W3CPractice.Modules.ContentTypeNegotiationModule, RedFishX.Web.W3CPractice.Modules" name="ContentTypeNegotiationModule" />
        </httpModules>

  2)把DLL文件复制到bin目录,搞定。
原创粉丝点击