http://www.sufeinet.com/plugin.php?id=keke_group

苏飞论坛

 找回密码
 马上注册

QQ登录

只需一步,快速开始

分布式系统框架(V2.0) 轻松承载百亿数据,千万流量!讨论专区 - 源码下载 - 官方教程

HttpHelper爬虫框架(V2.7-含.netcore) HttpHelper官方出品,爬虫框架讨论区 - 源码下载 - 在线测试和代码生成

HttpHelper爬虫类(V2.0) 开源的爬虫类,支持多种模式和属性 源码 - 代码生成器 - 讨论区 - 教程- 例子

查看: 17333|回复: 8

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

[复制链接]
发表于 2014-1-23 10:30:18 | 显示全部楼层 |阅读模式
asp.net[web.config] httphandlers 与实现自由定义访问地址

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

那么大家一定都会说,在网站WebSite1的api目录下一定有request.aspx这样一个文件。
那么我今天要告诉你的就是没有这个文件。如下图
QQ截图20140123101453.jpg
没错,这个目录下真的没有这个文件,我们先来访问一下看看效果
QQ截图20140123101536.jpg
你没有看错,没有报任何的错误,
那这是怎么回事呢。
我们现在可以来看看这个目录下有一个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文件定义多个文件名来访问,这样前台怎么也找不到你实际访问的是那个页面,而且还可以达到封装的效果。让非开发着不能轻易的看到你的页面代码。
因为这个是可以放在一个类库里面的。
如下
QQ截图20140123102222.jpg
也算是加了一层安全机制吧,
并且方便了大家控制
我们不管访问的是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)

本帖被以下淘专辑推荐:



1. 开通SVIP会员,免费下载本站所有源码,不限次数据,不限时间
2. 加官方QQ群,加官方微信群获取更多资源和帮助
3. 找站长苏飞做网站、商城、CRM、小程序、App、爬虫相关、项目外包等点这里
 楼主| 发表于 2014-1-23 10:42:44 | 显示全部楼层
大家还可以了解一下IIS的经典和集成模式的区别
发表于 2014-1-23 10:53:49 | 显示全部楼层
膜拜中……
回复

使用道具 举报

发表于 2014-3-8 15:52:05 | 显示全部楼层
一直用的Url插件完成重定向
发表于 2014-4-17 06:41:59 | 显示全部楼层
本帖最后由 abc54288 于 2014-4-17 10:26 编辑

那这种方法,怎么使用.NET 4.0中的路由功能?

因为在urlrouting中需要一个文件来对应。
routes.MapPageRoute("view", "view/{id}", "~/view/view.aspx", false, null,
                new RouteValueDictionary(new { id = "\\d+" }));
发表于 2014-9-28 19:52:44 | 显示全部楼层
很有用
回复

使用道具 举报

发表于 2015-8-26 11:53:14 | 显示全部楼层
首先谢谢飞哥给的例子 我是第一次做通信方面的 在这有几个问题请您解答下
这是webservice原始代码
QQ截图20150826114934.png
webservice作为中介 实现服务端和客户端的通信
一 webservice如何发送消息 和如何实时接收客户端或服务端的消息从而进行推送
二 客户端和服务端如何实时接收消息

希望飞哥给予帮助 谢谢

 楼主| 发表于 2015-8-26 13:11:08 | 显示全部楼层
yya5119 发表于 2015-8-26 11:53
首先谢谢飞哥给的例子 我是第一次做通信方面的 在这有几个问题请您解答下
这是webservice原始代码

webservice没法推送,只能主动请求
发表于 2015-11-16 17:47:33 | 显示全部楼层
膜拜中,来学习了。
您需要登录后才可以回帖 登录 | 马上注册

本版积分规则

QQ|手机版|小黑屋|手机版|联系我们|关于我们|广告合作|苏飞论坛 ( 豫ICP备18043678号-2)

GMT+8, 2024-4-20 19:57

© 2014-2021

快速回复 返回顶部 返回列表