当我们学习到一定程度的时候,我们会想要去深入了解代码底层的东西,也更想拥有一个属于自己的框架,当然,博主也正是如此。本文可能成为编写一个webapi框架的开端。有研究MVC框架的朋友会发现,mvc框架的路由MvcRouteHandler是实现了IRouteHandler而得以实现我们路由,而IRouteHandler只需要返回一个对像,那就是IHttpHandler,而IHttphandler正是处理http请求的。欣喜之中,我们发现我们已经拥有了编写一个webapi最核心的东西,路由以及请求处理。可能本系列文章不会特别深刻的去说明这两个东西具体是什么,而是专注于使用它们,有兴趣的朋友自行了解哦,对理解.net下面的网络请求处理有很大的帮助。

  话不多说了,直接开始

  我们直接建立一个完全空的asp.net web项目

  

  不勾选任何东西。

  然后,我们新增一个BaseRouteHandler,继承自(实现)IRouteHandler,代码如下

  

 public class BaseRouteHandler:IRouteHandler
{
public IHttpHandler GetHttpHandler(RequestContext requestContext)
{
return new BaseHttpHandler();
}
}

  我们看到返回了一个BaseHttphandler,这是我们自己编写的

  新建一个BaseHttpHandler,实现IHttpHandler,值得注意的是,如果你需要这个Handler能处理session,你只需要继承IRequiresSessionState,这个接口只是个标记,不需要任何实现

public class BaseHttpHandler:IHttpHandler
{
public bool IsReusable
{
get { return false; }
}
public void ProcessRequest(HttpContext context)
{
var request = context.Request;
var response = context.Response;
var method = request.HttpMethod.ToLower();
var result = string.Empty; result = string.Format("您正在请求BaseHttpHandler,请求方式是{0},queryStr={1}", method,request.QueryString);
response.ContentType = "application/json";
response.Write(result);
response.End();
}
}

  

  IHttpHander只有两个东西,一个是IsResuable,IsReusable属性,MSDN上是这样解释的:获取一个值,该值指示其他请求是否可以使用 IHttpHandler 实例。也就是说后继的Http请求是不是可以继续使用实现了该接口的类的实例,这里我们设置成false,因为我们不需要再去继承这个Handler了

  另外一个是ProcessRequest,这个就是处理具体的请求,HttpContext里面包含了我们的http请求的各种参数,我们只需要对context的数据进行处理。

  访问之前,我们需要注册路由

  我们为程序添加一个全局全局应用程序类,删除除了Application_Start方法以外所有的方法,然后编写以下代码

 public class Global : System.Web.HttpApplication
{
protected void Application_Start(object sender, EventArgs e)
{
RouteTable.Routes.Add(new Route("api", new BaseRouteHandler()));
}
}

  行文到此,项目已经可以正常运行了,于是我们着急的编译运行,输入地址

  注意哦,由于我们路由注册的是api,所以在我们项目地址栏之后加上/api的路由就可以正常请求到我们自定义的HttpRouteHandler里面了。

  于是,我们了解到,最最基础的有三个点:

  一.实现IRouterHandler,

  二.实现IHttpHandler,

  三.注册路由

  如果你也手痒痒,那么,去实现自己的框架吧!

  待续。。。

咦,好像可以自己做个webapi框架了-IRouteHandler的使用的更多相关文章

  1. webapi框架搭建-创建项目(三)-webapi owin

    上一篇:创建项目(二) 在上一篇里,我们已经创建好了webapi应用,并已经部署到iis里,本篇讲如何用owin自宿主或是iis宿主来部署webapi应用. owin介绍 传统的asp.net网站只能 ...

  2. webapi框架搭建-日志管理log4net

    前言 本篇讲怎么在前几篇已经创建好的项目里加上日志处理机制,我们采用Log4net技术.跟多的log4net技术的细节请查阅log4net的官网. log4net官网:http://logging.a ...

  3. C#净化版WebApi框架

    前言 我们都知道WebApi是依赖于Asp.Net MVC的HttpRouteCollection进行路由 . 但WebApi和MVC之间是没有依赖关系的, WebApi的基类ApiControlle ...

  4. webapi框架搭建-安全机制(四)-可配置的基于角色的权限控制

    webapi框架搭建系列博客 在上一篇的webapi框架搭建-安全机制(三)-简单的基于角色的权限控制,某个角色拥有哪些接口的权限是用硬编码的方式写在接口上的,如RBAuthorize(Roles = ...

  5. webapi框架搭建-安全机制(二)-身份验证

    webapi框架搭建系列博客 身份验证(authentication)的责任是识别出http请求者的身份,除此之外尽量不要管其它的事.webapi的authentication我用authentica ...

  6. webapi框架搭建-安全机制(一)

    本系列博客链接:webapi框架搭建系列博客 前言 webapi接口是开放给外部使用的,包括接口的地址,传参的规范,还有返回结果的说明.正因为接口的开放性,使得接口的安全很重要.试想一下,用抓包工具( ...

  7. ASP.NET WebAPI框架解析第二篇(HttpModule的创建和使用)

    我们先看一下执行流程图 图中画红圈的部分便是HttpModule,在说创建HttpModule之前,先说一下HttpApplication对象,HttpApplication对象由Asp.net框架创 ...

  8. APP之构架自己的webapi框架

    当我们学习到一定程度的时候,我们会想要去深入了解代码底层的东西,也更想拥有一个属于自己的框架.本文可能成为编写一个webapi框架的开端.有研究MVC框架的朋友会发现,mvc框架的路由MvcRoute ...

  9. webapi框架搭建-依赖注入之autofac

    前言 c#的依赖注入框架有unity.autofac,两个博主都用过,感觉unity比较简单而autofac的功能相对更丰富(自然也更复杂一点),本篇将基于前几篇已经创建好的webapi项目,引入au ...

随机推荐

  1. idea+springmvc+spring+mybatis+maven整合返回json数据webapi

    首先看一张目录结构图: : 创建步骤: 1.创建maven  webapp工程, 创建完后的目录结构为: 2.添加项目依赖(添加jar包) 需要的jar包: spring-webmvc, spring ...

  2. C#图像处理——ImageProcessor

    这是个老生常谈的话题,需求实在太多,而且也较简单,写此文也是因为几个月没写技术文章了,权当为下一步开个头.我之前也做过很多此类项目,但是就我自己来说每次处理方式还都不一样,有用OpenCV的,有用Ma ...

  3. CSS3弹性伸缩布局(中)——flexbox布局

    混合过渡版 上一篇我们主要讲了旧版box布局,今天这篇主要讲flexbox布局. 混合版本的Flexbox模型是2011年提出的工作草案,主要是针对IE10浏览器实现的伸缩布局效果,其功能和旧版本的功 ...

  4. cin 字符串输入

    cin 字符串输入 在学习c的时候,关于字符串的输入,记得有 scanf("%s",s); gets(s); 还有...o.o 好想没了... scanf("%s&quo ...

  5. trait技术详解,这次包你学得会

    trait的使用技巧trait是php5.4以后新增加的一个功能,可以将多个类中,共用的一些属性和方法提取出来做来公共trait类,就像是装配汽车的配件,如果你的类中要用到这些配件,就直接用use导入 ...

  6. ES6相关新特性介绍

    你可能已经听说过 ECMAScript 6 (简称 ES6)了.ES6 是 Javascript 的下一个版本,它有很多很棒的新特性.这些特性复杂程度各不相同,但对于简单的脚本和复杂的应用都很有用.在 ...

  7. TCP协议总结

    TCP的特性 TCP提供一种面向连接的.可靠的字节流服务 在一个TCP连接中,仅有两方进行彼此通信.广播和多播不能用于TCP TCP使用校验和,确认和重传机制来保证可靠传输 TCP给数据分节进行排序, ...

  8. poj Layout 差分约束+SPFA

    题目链接:http://poj.org/problem?id=3169 很好的差分约束入门题目,自己刚看时学呢 代码: #include<iostream> #include<cst ...

  9. weblogic java.lang.OutOfMemoryError: PermGen space 问题解决方法

    文章转自:http://blog.csdn.net/cuihaiyang/article/details/6679735 最近安装了WebLogic10.3.4,测试在weblogic上部署项目,没过 ...

  10. 学java网络编程的心得体会

    网络编程简单思路 一.发送端1创建udp服务,通过DatagramSocket对象;2确定数据,封装成包DatagramPacket(byte[] buf, int length, InetAddre ...