首页 新闻 会员 周边

代理HttpModule的类,如何在web.config中正确地注册?

0
悬赏园豆:40 [已解决问题] 解决于 2012-06-30 09:14

我自定义了一个代理HttpModule的类UrlReWriteHttpModule,代码如下:

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的配置如下:

<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起冲突?或者其他原因?

芬陀利华的主页 芬陀利华 | 初学一级 | 园豆:106
提问于:2012-06-22 15:52
< >
分享
最佳答案
0

写成name="UrlReWriteHttpModule"就可以了,里面内容为类名。

芬陀利华 | 初学一级 |园豆:106 | 2012-06-26 21:25
其他回答(2)
0

没写错。假如这个DLL不是Web应用的DLL,那要加上DLL文件名。

你可以把这个类名故意写错,看报告什么错误。

另外,还可以在INIT方法里设置断点,看是否绑定了事件。

收获园豆:13
无之无 | 园豆:5095 (大侠五级) | 2012-06-22 16:11

我没写成dll,而是把自定义的类添加在App_Code文件夹里面的。

支持(0) 反对(0) 芬陀利华 | 园豆:106 (初学一级) | 2012-06-22 17:25

故意把类名写错的话,我这样子写:<add name="MyHttpModule" type="MyModule.UrlReWriteHttpModule1"/>(类名后加了个1)

出现警告:

配置错误

说明: 在处理向该请求提供服务所需的配置文件时出错。请检查下面的特定错误详细信息并适当地修改配置文件。

分析器错误消息: 未能加载类型“MyModule.UrlReWriteHttpModule1”。 (C:\Documents and Settings\Administrator\桌面\复件 WebSite5\web.config line 12)

源错误:

行 10: 	<system.web>
行 11:     <httpModules>
行 12:       <add name="MyHttpModule" type="MyModule.UrlReWriteHttpModule1"/>
行 13:     </httpModules>
行 14:     <httpHandlers>


源文件: C:\Documents and Settings\Administrator\桌面\复件 WebSite5\web.config    行: 12

支持(0) 反对(0) 芬陀利华 | 园豆:106 (初学一级) | 2012-06-22 17:30
0

注释掉 Context.Response.Redirect(DictionaryClass.Str_FakePath); 会不会重定向?

收获园豆:14
dudu | 园豆:31003 (高人七级) | 2012-06-23 13:11

不会了。

另外我想说,<add name="UrlReWriteHttpModule" type="MyModule.UrlReWriteHttpModule"/>这样改程序就能进入这个自定义的类了。

支持(0) 反对(0) 芬陀利华 | 园豆:106 (初学一级) | 2012-06-25 10:34
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册