ASP.NET之自定义同步HTTP处理程序(图文教程)

一、前言

说来这片简单的教程还真是碰巧,是刚好我在写另一个页指令的时候看到的。就跟着进来看了看是什么东西,发现比我们之前只会用.ashx,并且只能在申请这个文件才可以进行响应。这些似乎让它变不灵活,不能让我们灵活的应用。而自定义HTTP处理程序可以完全消除上面的问题,它只是一个.cs的类文件,并且你只要按照很简单的准备工作就可以获得很多的灵活度:

1.可以自定义用户访问何网页时响应该文件并把数据呈现发送给客户端

2.可以对所有具有一致的后缀名的请求文件定义一个处理程序

3.具有同步与异步选择

我相信一定有人对于上面的说有一定不的理解,这里我需要解释它的一个重要意义,那么大家就自然知道它的灵活所在了。

我们先举例:

1.比如你访问    http://www.****.com/web1.msll

你一定发现了问题所在.后缀名是 .msll 你浏览网页到如今一定没有见过。而这个的确就是自定义HTTP处理程序的一个特点所在,后缀名可以自己伪造。这个时候你一定会认为 web1 是那个 .cs 文件的名称,但是结果是 web1 根本不是那个 .cs 文件的文件名.他们是通过绑定来实现的。比如我实现了一个  he.cs 的类,然后我将其绑定到  hehehe.ppd 那么当你访问 http://www.*****.com/hehehe.ppd  那么响应这个页面的是 he.cs 的输出结果

2.我们还是假设你访问  http://www.****.com/list1.ssm

http://www.****.com/list2.ssm

http://www.****.com/list3.ssm

假如我告诉你这个三个看似不同的页面其实都是一个 HTTP处理程序的输出结果,这个其实很好理解,如果我写了一个 bbsss.cs 的类,并且实现了有关功能。然后我将其绑定到 *.ssm 你可以发现这里是 *.ssm  这个时候你就按照你正常的思考,就是只要是对后缀名是 .ssm 页面的申请都是使用同一个 bbsss.cs 类,这下是不是有趣了

二、注册与绑定

为什么要有这两部呢?而且还是要注册与绑定这两个呢?

答案是 你只写一个类 vs是不可能知道你这个东西是干什么的,所以我们需要在 web.config 中注册我们自定义的HTTP处理程序。而绑定则是让iis知道我们这个站点中含有一个自定义的HTTP处理程序。(下面我将以 iis7 为例说明如何绑定)

1.注册


代码如下:

<configuration>
<system.web>
<httpHandlers>
<add verb="*" path="<!-- 这里写需要绑定的客户端申请的页面(*.smm,*.ffs,web1.ffe) -->" type="<!-- 这里写处理程序的类名 -->"
</httpHandlers>
</system.web>
</configuration>

以上需要自行编写的部分我都已使用注释写好

2.绑定( iis7 )

1) 打开 iis7 -》 打开  网站  节点 -》 点击你的网站的名称

2) 双击

3) 点击

4)

5) 最后点击 确定 这样在 iis 中的绑定就完成了(后面的完整例子我将会以文字介绍该过程)

三、关于类的实现注意点

虽然我们介绍完了注册与绑定,但还不是所有,关于类的实现也有一定的要求。根据MSDN文档的说明必须实现 ProcessRequest 方法与 IsReusable 属性

关于 ProcessRequest 可以暂时理解为 Page_Load (即使他比Page_Load更底层)

其次就是没有内置的 Request 与 Response ,可能有些人要崩溃了那怎么写啊,很简单的问题没有内置我们就自己去定义

IsReusable 的类型是 bool 类型,而且只要实现 get 不需要实现 set ,如果返回 true 表示使用线程池 如果为 false 表示不使用

关于这个类文件的放置也有要求,要放在App_Code 文件夹下(vs的站点中可以直接新建这个特殊的文件夹)

四、完整的例子(自行新建类)

1.

以下为 HelloWorldHandler.cs 类的具体实现(放置在 App_Code 文件夹下)


代码如下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

/// <summary>
///HelloWorldHandler 的摘要说明
/// </summary>
public class HelloWorldHandler : IHttpHandler
{
public HelloWorldHandler()
{
}

public void ProcessRequest(HttpContext context)
{
HttpRequest Request = context.Request;
HttpResponse Response = context.Response;
Response.Write("<html>");
Response.Write("<body>");
Response.Write("<h1>hello</h1>");
Response.Write("</body>");
Response.Write("</html>");
}

public bool IsReusable
{
get
{
return false;
}
}
}

2.以下为 web.config 的内容


代码如下:

<httpHandlers> 
<add verb="*" path="*.sample" type="HelloWorldHandler" /> 
</httpHandlers>

3.IIS 配置(不要忘记把项目部署到 iis 中)

以下为具体配置

然后测试 http://localhost/SampleApplication/test.sample(端口为 80 时)

你就可以看到你的成果了

五、完结

到此你已经基本掌握了 自定义同步HTTP处理程序 ,当然这个只是一小部分,后面我们还会接触到异步,因为同步在用户访问量很大的情况下将会使服务器资源迅速耗尽,而且也会让降低用户的实用性

(0)

相关推荐

  • ASP.NET之自定义同步HTTP处理程序(图文教程)

    一.前言 说来这片简单的教程还真是碰巧,是刚好我在写另一个页指令的时候看到的.就跟着进来看了看是什么东西,发现比我们之前只会用.ashx,并且只能在申请这个文件才可以进行响应.这些似乎让它变不灵活,不能让我们灵活的应用.而自定义HTTP处理程序可以完全消除上面的问题,它只是一个.cs的类文件,并且你只要按照很简单的准备工作就可以获得很多的灵活度: 1.可以自定义用户访问何网页时响应该文件并把数据呈现发送给客户端 2.可以对所有具有一致的后缀名的请求文件定义一个处理程序 3.具有同步与异步选择 我

  • ASP.NET之自定义异步HTTP处理程序(图文教程)

    一.前言 1.对读者想说的话:(可跳过) 在此我感谢那些看了<ASP.NET之自定义同步HTTP处理程序>这篇文章以及看到了这篇<ASP.NET 之 自定义 异步HTTP处理程序>的亲们.前面的那篇可能看过MSDN的亲们一定会发现很多熟悉的地方.而我其实就是比较详细的介绍了一下,让大家更好的理解 PS:MSDN从头到尾都是文字且文字很统一,恐怕很多人都感觉畏惧,懒的去看,所以我将其重要的部分提取出来,使用易懂的例子和简洁的语言来叙述.当然其中也免不了错误,希望各位亲们可以指出. 2

  • Pycharm 设置自定义背景颜色的图文教程

    Pycharm可以通过设置主题来设定背景颜色,但主题的背景颜色也仅仅局限特定的几种,通过如下的方式可以自定义背景颜色. File--Settings--Editor--General--(右侧上方的框框)Text--Default text--选右侧的Background就可以设置背景色了. 图中的灰色背景RGB是192,192,192. 以上这篇Pycharm 设置自定义背景颜色的图文教程就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们.

  • ASP.NET通过自定义函数实现对字符串的大小写切换功能

    本文实例讲述了ASP.NET通过自定义函数实现对字符串的大小写切换功能.分享给大家供大家参考.具体实现方法如下: 方法1: public string ToggleCase(string input) { string result = string.Empty; char[] inputArray = input.ToCharArray(); foreach (char c in inputArray) { if (char.IsLower(c)) result += c.ToString()

  • ASP.NET MVC自定义错误页面真的简单吗?

    如果你在设置asp.net mvc自定义错误页面时遇到问题,这并不止你一个人.惊讶之余你的做法是正确的,没有起到作用的原因是其一部分错误是由asp.net管道处理的,另一部分是由iis直接处理. 通常情况 (我期望是这种情况,在一些其他框架/服务器上) 我们只需要在一个地方配置自定义错误页就可以了,无论怎么哪儿引发的错误.就像这样︰ <customErrors mode="On"> <error code="404" path="404.

  • Java并发编程中构建自定义同步工具

    当Java类库没有提供适合的同步工具时,就需要构建自定义同步工具. 可阻塞状态依赖操作的结构 复制代码 代码如下: acquir lock on object state;//请求获取锁 while(precondition does not hold){//没有满足前提条件    release lock;//先释放锁    wait until precondition might hold;//等待满足前提条件    optionlly fail if interrupted or tim

  • ASP.NET如何自定义项目模板详解

    前言 在微服务架构盛行的时代,一言不合就新建一个服务,虽然搭建服务并没什么难度,但不可避免的是每个人搭建出来的架子会存在差异,这很合理,因为每个开发者的个人风格.工作经验都不一样,难免认为自己喜欢的才是最好的.另一方面,如果需要较频繁搭建服务,这些重复而没难度的操作就显得浪费时间,而且每次手动处理总可能存在一些细节上的失误,出现异常然后花时间解决更得不偿失. 面对以上一些问题,拥有一个符合自己团队的项目模板就显得比较重要了,这篇文章主要介绍在 ASP.NET 如果自定义项目模板. 内置的项目模板

  • thinkphp5框架结合mysql实现微信登录和自定义分享链接与图文功能示例

    本文实例讲述了thinkphp5框架结合mysql实现微信登录和自定义分享链接与图文功能.分享给大家供大家参考,具体如下: php代码 function curlHtml($url){ $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_HEADER, 0); curl_setopt($ch, CU

  • ASP.NET Core自定义中间件如何读取Request.Body与Response.Body的内容详解

    背景# 最近在徒手造轮子,编写一个ASP.NET Core的日志监控器,其中用到了自定义中间件读取Request.Body和Response.Body的内容,但是编写过程,并不像想象中的一帆风顺,ASP.NET Core针对Request.Body和Response.Body的几个特殊设计,导致了完成以上功能需要绕一些弯路. 原始代码# 为了读取Request.Body和Response.Body的内容,我的实现思路如下: 创建一个LoggerMiddleware的中间件,将它放置在项目中间件管

  • IDEA创建自定义模板图文教程

    IDEA创建自定义模板 1.项目目录任意一处 右键 > 新建 > 编辑文件模板 2.点击加号创建模板 3.设置名称(如:XML File,Servlet File),扩展名(决定该模板生成什么文件),模板内容,勾选按照样式重新格式化 4.应用,右键新建文件查看,XML和Servlet就是我配置的两个模板 到此这篇关于IDEA创建自定义模板图文教程的文章就介绍到这了,更多相关IDEA创建自定义模板内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

随机推荐