日期:2014-05-17  浏览次数:20561 次

代理HttpModule的类,如何在web.config中正确地注册?
我自定义了一个代理HttpModule的类UrlReWriteHttpModule,代码如下:
C# code

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Text.RegularExpressions;

namespace MyModule
{
    /// <summary>
    ///UrlReWriteHttpModule 的摘要说明
    /// </summary>
    public class UrlReWriteHttpModule : IHttpModule
    {
        public UrlReWriteHttpModule()
        {
            //
            //TODO: 在此处添加构造函数逻辑
            //
        }
        public void Dispose()
        {
            //throw new Exception("The method or operation is not implemented.");
        }

        public void Init(HttpApplication context)
        {
            context.BeginRequest += new EventHandler(context_BeginRequest);
        }

        void context_BeginRequest(object sender, EventArgs e)
        {
            if (DictionaryClass.CallToUrlReWriteHttpModule_BOOL_Execute == false)   //假如HTTP的请求是重写的.aspx,则返回
            {
                DictionaryClass.CallToUrlReWriteHttpModule_BOOL_Execute = true;
                return;
            }
            HttpContext Context = (sender as HttpApplication).Context;
            Regex reg1 = new Regex(@"(?<=.+)\.aspx(?=\?.+)?", RegexOptions.IgnoreCase);   //匹配最初的.aspx请求
            Match math1 = reg1.Match(Context.Request.RawUrl);
            if (math1.Success)
            {
                DictionaryClass.MachingUrl(Context);
                Context.Response.Redirect(DictionaryClass.Str_FakePath);   //从最初的.aspx重定向到对应的.html
            }
        }
    }
}


web.config的配置如下:
XML code

<system.web>
    <httpModules>
      <add name="MyHttpModule" type="MyModule.UrlReWriteHttpModule"/>
    </httpModules>
    <httpHandlers>
      <add verb="*" path="*.html" type="UrlRewriter"/>
    </httpHandlers>
     ......
</system.web>



但是程序运行的时候,网页一直重定向,不知道为什么。在UrlReWriteHttpModule的context.BeginRequest += new EventHandler(context_BeginRequest);此处断点,但是发现程序根本没“走”到这里。

请问大家,是我在web.config中写法错了,还是节点httpModules和httpHandlers起冲突?或者其他原因?

------解决方案--------------------
XML code

<httpModules>
      <add name="UrlReWriteHttpModule" type="MyModule.UrlReWriteHttpModule,App_Code"/>
    </httpModules>