咦,好像可以自己做个webapi框架了-IRouteHandler的使用
当我们学习到一定程度的时候,我们会想要去深入了解代码底层的东西,也更想拥有一个属于自己的框架,当然,博主也正是如此。本文可能成为编写一个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的使用的更多相关文章
- webapi框架搭建-创建项目(三)-webapi owin
上一篇:创建项目(二) 在上一篇里,我们已经创建好了webapi应用,并已经部署到iis里,本篇讲如何用owin自宿主或是iis宿主来部署webapi应用. owin介绍 传统的asp.net网站只能 ...
- webapi框架搭建-日志管理log4net
前言 本篇讲怎么在前几篇已经创建好的项目里加上日志处理机制,我们采用Log4net技术.跟多的log4net技术的细节请查阅log4net的官网. log4net官网:http://logging.a ...
- C#净化版WebApi框架
前言 我们都知道WebApi是依赖于Asp.Net MVC的HttpRouteCollection进行路由 . 但WebApi和MVC之间是没有依赖关系的, WebApi的基类ApiControlle ...
- webapi框架搭建-安全机制(四)-可配置的基于角色的权限控制
webapi框架搭建系列博客 在上一篇的webapi框架搭建-安全机制(三)-简单的基于角色的权限控制,某个角色拥有哪些接口的权限是用硬编码的方式写在接口上的,如RBAuthorize(Roles = ...
- webapi框架搭建-安全机制(二)-身份验证
webapi框架搭建系列博客 身份验证(authentication)的责任是识别出http请求者的身份,除此之外尽量不要管其它的事.webapi的authentication我用authentica ...
- webapi框架搭建-安全机制(一)
本系列博客链接:webapi框架搭建系列博客 前言 webapi接口是开放给外部使用的,包括接口的地址,传参的规范,还有返回结果的说明.正因为接口的开放性,使得接口的安全很重要.试想一下,用抓包工具( ...
- ASP.NET WebAPI框架解析第二篇(HttpModule的创建和使用)
我们先看一下执行流程图 图中画红圈的部分便是HttpModule,在说创建HttpModule之前,先说一下HttpApplication对象,HttpApplication对象由Asp.net框架创 ...
- APP之构架自己的webapi框架
当我们学习到一定程度的时候,我们会想要去深入了解代码底层的东西,也更想拥有一个属于自己的框架.本文可能成为编写一个webapi框架的开端.有研究MVC框架的朋友会发现,mvc框架的路由MvcRoute ...
- webapi框架搭建-依赖注入之autofac
前言 c#的依赖注入框架有unity.autofac,两个博主都用过,感觉unity比较简单而autofac的功能相对更丰富(自然也更复杂一点),本篇将基于前几篇已经创建好的webapi项目,引入au ...
随机推荐
- 局域网内补丁更新80072EE2错误
在公网中,80072ee2通常是在进行自动更新时遇到的连接性错误.通常由于三防杀毒软件或者浏览器,代理服务器设置不正确而导致的.那么如果是在局域网中遇到该问题,该如何解决呢? 错误截图: 1.首先确认 ...
- IBM GPFS并行文件系统
原文地址:http://www.hqschina.com/Show.aspx?info_lb=283&info_id=751&flag=103 IBM GPFS文件系统是一种专门为群集 ...
- 【翻译】FreeMarker——入门
原文传送门 1. Template + data-model = output data-model是一个树状模型,通常是一个java对象. 2.data-model 入门 hashes(散列):目录 ...
- 编写一个简单的java服务器程序
import java.net.*;import java.io.*; public class server{ ); //监听在80端口 Socket sock = server.accept(); ...
- 音频特征提取——librosa工具包使用
作者:桂. 时间:2017-05-06 11:20:47 链接:http://www.cnblogs.com/xingshansi/p/6816308.html 前言 本文主要记录librosa工具 ...
- shapeless官方指南翻译总结
今天抽空把之前翻译的<The Type Astronaut's Guide to Shapeless>一书放到了Gitbook上,将其开源供所有人阅读并希望大家能够提出宝贵意见,地址为sh ...
- Linux目录与文件的权限
零.Linux中的权限为什么重要? 权限直接关系数据安全! 一.用户基础概念: 所有者(owner):拥有这个文件的用户.一般拥有目录或文件的所有权限. 用户组(group):几个用户组成一个用户组, ...
- redis连接池的使用方法
所需jar:jedis-2.8.0.jar和commons-pool-2-2.3jar Jedis操作步骤如下:1->获取Jedis实例需要从JedisPool中获取:2->用完Jedis ...
- 桥梁模式(Bridge Pattern)
桥梁模式是对象的结构模式.又称为柄体(Handle and Body)模式或接口(Interface)模式.桥梁模式的用意是“将抽象化(Abstraction)与实现化(Implementation) ...
- IE6.0升级的两种通用代码
随着W3C组织开始针对新的Web标准提案日期的到来,HTML5以及CSS3的新时代即将到来,同时微软的Win8以及IE10的出现也带给了这个世界奇妙的结构. 微软早在不再给WinXP做技术支持时,IE ...