• asp.net[web.config] httphandlers 与实现自由定义访问地址


    今天一起来看一个简单的例子,主要是用来实现一个映射功能,
    我们一般访问一个网址的时候比如是这样的
    http://localhost:6166/WebSite1/api/request.aspx?strtext=123

    那么大家一定都会说,在网站WebSite1的api目录下一定有request.aspx这样一个文件。
    那么我今天要告诉你的就是没有这个文件。如下图

    你没有看错,没有报任何的错误,
    那这是怎么回事呢。
    我们现在可以来看看这个目录下有一个Webconfig文件,咱们打开看一下

    复制代码
    <?xml version="1.0"?>
    <configuration>
      <!--IIS经典模式下使用-->
      <system.web>
        <httpHandlers>
          <add path="request.aspx" verb="*" type=" Bll.Handler.Test"/>
          <add path="test.aspx" verb="*" type=" Bll.Handler.Test"/>
        </httpHandlers>
      </system.web>
      <!--IIS集成模式下使用-->
      <!--<system.webServer>
        <handlers>
          <add name="request" path="request.aspx" verb="*" type=" Bll.Handler.Test"/>
          <add name="test" path="test.aspx" verb="*" type=" Bll.Handler.Test"/>
        </handlers>
      </system.webServer>-->
    </configuration>
    复制代码

    这是什么意思呢。
    这里面有两种配置,主要是适用于IIS的集成模式和经典模式,只是配置不同,暂时没有其他的不同点
    大家知道就行了,
    下面以经典模式来分析下吧

    <add path="request.aspx" verb="*" type=" Bll.Handler.Test"/>

    path这个呢就是我们访问的网页地址,就是上面输入的,我们找不到的那个文件名
    然后对应的处理程序是type=" Bll.Handler.Test"
    verb="*" 是指定接收的方式,*是Get,Post都可以,也可以直接写Post这样就只接收Post提交了。
    现在大家明白了吧
    你访问request.aspx其实访问的就是Bll.Handler.Test.cs
    看代码

    复制代码
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Web;
    using Bll;
     
    namespace Bll.Handler
    {
        class Test : IHttpHandler
        {
            public void ProcessRequest(HttpContext context)
            {
                //接收这个参数
                string strtext = context.Request["strtext"].Trim();
                //输出这个参数
                context.Response.Write(strtext);
            }
            public bool IsReusable
            {
                get
                {
                    return false;
                }
            }
        }
    }
    复制代码

    我的Webconfig有两个配置意思就是说我们可以给这个Test.cs文件定义多个文件名来访问,这样前台怎么也找不到你实际访问的是那个页面,而且还可以达到封装的效果。让非开发着不能轻易的看到你的页面代码。
    因为这个是可以放在一个类库里面的。
    如下

    也算是加了一层安全机制吧,
    并且方便了大家控制
    我们不管访问的是http://localhost:6166/WebSite1/api/request.aspx?strtext=123
    还是http://localhost:6166/WebSite1/api/test.aspx?strtext=123
    都是在访问一个一般处理程序Test.cs
    而且这个访问的名字大家可以随便配置

  • 相关阅读:
    进程通信
    python模块成像库pillow
    python模块IO
    python模块StringIO和BytesIO
    DJango重写用户模型
    DJango模型Meta选项详解
    DJango中事务的使用
    批量删除文件
    批量修改文件名字或后缀
    自定义中间件实现插拔设计
  • 原文地址:https://www.cnblogs.com/asdyzh/p/9741520.html
Copyright © 2020-2023  润新知