在处理HttpHandler时要注意的几个问题

今天在网上找了一个处理URL重写的例子,原理使用Asp.Net中的HttpHandler实现URL重写的,当URL的后缀是XXX.shtml,而且XXX必须是数字的时候进行处理:

using System;
using System.Web;
using System.Text.RegularExpressions;

namespace test
{
    
public class NewHttpHandler:IHttpHandler
    
{
        
public void ProcessRequest(HttpContext Context)
        
{
            
try
            
{
                
//申明Request
                HttpRequest Request = Context.Request;
                
//取来路Url的绝对路径
                string Url = Request.Url.AbsolutePath;
                
//取访问的Web文件的开始字符间隔数
                int RegStart = Url.LastIndexOf("/"+ 1;
                
//申明一个确定Web文件名是否全是数字
                Regex Reg = new Regex(@"\d+");
                
//用正则表达式进行匹配
                if (Reg.IsMatch(Url, RegStart))
                
{
                    
//如果web文件名是数字,则判定是查询相关文章,执行指定页面
                    Context.Server.Execute("~/PermaLink.aspx?id=" + Reg.Match(Url, RegStart).Value);
                }

            }

            
catch
            
{
                Context.Response.Redirect(Context.Request.Url.ToString());
            }

            
        }


        
/// <summary>
        
/// 获取一个值,该值指示其他请求是否可以使用 IHttpHandler 实例。
        
/// </summary>

        public bool IsReusable 
        
{
            
get 
            
{
                
return true;
            }

        }

    }

    
}

然后是配置web.config的 <httpHandlers>节点:
     <httpHandlers>
        
<add verb="*" path="*.shtml" type="test.NewHttpHandler,test" />
    
</httpHandlers>

接着配置IIS,刚刚开始的时候怎么也不能得到结果,郁闷……
最后发配置时的两个问题:
1.<httpHandlers>节点的写法:type="处理HttpHander的类的完全名称即命名空间+类名,程序集名称"
2.IIS中在Web项目的属性中,在主目录选项卡里,把执行权限改为"脚本和可执行文件",然后打开配置,*.shtml默认情况下处理程序是C:\WINDOWS\system32\inetsrv\ssinc.dll,如果要让ASP.net处理应改为C:\WINDOWS\system32\inetsrv\ssinc.dll,去掉检查文件是否存在的复选框
3.如果要改其他扩展名也是一样的道理,注意上面两个问题就是了
posted @ 2006-11-11 14:36  代码乱了  阅读(487)  评论(0编辑  收藏  举报