| asp.net[web.config] httphandlers 与实现自由定义访问地址 
 今天一起来看一个简单的例子,主要是用来实现一个映射功能,
 我们一般访问一个网址的时候比如是这样的
 http://localhost:6166/WebSite1/api/request.aspx?strtext=123
 
 那么大家一定都会说,在网站WebSite1的api目录下一定有request.aspx这样一个文件。
 那么我今天要告诉你的就是没有这个文件。如下图
 
   没错,这个目录下真的没有这个文件,我们先来访问一下看看效果
 
   你没有看错,没有报任何的错误,
 那这是怎么回事呢。
 我们现在可以来看看这个目录下有一个Webconfig文件,咱们打开看一下
 
 [XML] 纯文本查看 复制代码 <?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的集成模式和经典模式,只是配置不同,暂时没有其他的不同点
 大家知道就行了,
 下面以经典模式来分析下吧
 
 [XML] 纯文本查看 复制代码 <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
 看代码
 
 [C#] 纯文本查看 复制代码 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
 而且这个访问的名字大家可以随便配置,我个人感觉还是很方便的。
 有兴趣的朋友可以试试
 下面是本例子的源码,大家可以下载试手
 
  WebSite1.rar
(12.8 KB, 下载次数: 447) |