• 在处理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.如果要改其他扩展名也是一样的道理,注意上面两个问题就是了
  • 相关阅读:
    JS 反射机制及 Reflect 详解
    React Hooks
    深入理解 React setState
    React 函数组件和类组件的区别
    tsconfig.json 编译器配置大全
    React TS 解决不声明变量类型时的报错问题
    JSX onClick 和 HTML onclick 的区别
    深入理解 ES6 Generator
    JS 算法与数据结构之队列
    深入理解 ES6 Proxy
  • 原文地址:https://www.cnblogs.com/jintan/p/557580.html
Copyright © 2020-2023  润新知