我自定义了一个代理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起冲突?或者其他原因?
写成name="UrlReWriteHttpModule"就可以了,里面内容为类名。
没写错。假如这个DLL不是Web应用的DLL,那要加上DLL文件名。
你可以把这个类名故意写错,看报告什么错误。
另外,还可以在INIT方法里设置断点,看是否绑定了事件。
我没写成dll,而是把自定义的类添加在App_Code文件夹里面的。
故意把类名写错的话,我这样子写:<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
注释掉 Context.Response.Redirect(DictionaryClass.Str_FakePath); 会不会重定向?
不会了。
另外我想说,<add name="UrlReWriteHttpModule" type="MyModule.UrlReWriteHttpModule"/>这样改程序就能进入这个自定义的类了。