當前位置:
首頁 > 知識 > 咦,好像可以自己做個webapi框架了-IRouteHandler的使用

咦,好像可以自己做個webapi框架了-IRouteHandler的使用

當我們學習到一定程度的時候,我們會想要去深入了解代碼底層的東西,也更想擁有一個屬於自己的框架,當然,博主也正是如此。本文可能成為編寫一個webapi框架的開端。有研究MVC框架的朋友會發現,mvc框架的路由MvcRouteHandler是實現了IRouteHandler而得以實現我們路由,而IRouteHandler只需要返回一個對像,那就是IHttpHandler,而IHttphandler正是處理http請求的。欣喜之中,我們發現我們已經擁有了編寫一個webapi最核心的東西,路由以及請求處理。可能本系列文章不會特別深刻的去說明這兩個東西具體是什麼,而是專註於使用它們,有興趣的朋友自行了解哦,對理解.net下面的網路請求處理有很大的幫助。

話不多說了,直接開始

我們直接建立一個完全空的asp.net web項目

咦,好像可以自己做個webapi框架了-IRouteHandler的使用

不勾選任何東西。

然後,我們新增一個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));
}
}

行文到此,項目已經可以正常運行了,於是我們著急的編譯運行,輸入地址

咦,好像可以自己做個webapi框架了-IRouteHandler的使用

注意哦,由於我們路由註冊的是api,所以在我們項目地址欄之後加上/api的路由就可以正常請求到我們自定義的HttpRouteHandler裡面了。

於是,我們了解到,最最基礎的有三個點:

一.實現IRouterHandler,

二.實現IHttpHandler,

三.註冊路由

如果你也手痒痒,那麼,去實現自己的框架吧!

待續。。。

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 科技優家 的精彩文章:

8 面向對象之抽象類+介面+內部類
Elasticsearch 與 Kafka 整合剖析
Docker-compose實戰——Django+PostgreSQL
node.js入門系列(一)——Node.js簡介
HTTP權威指南-HTTP報文

TAG:科技優家 |

您可能感興趣

To Be One with the Sharp Faculty做個利根者
做個有品位的都市人 |adidas NMD CS1 PK 「Core Black」 | Xsneaker
怎麼看完 Junya Watanabe 的,都想去做個「老熟男」
去超市這麼拍,做個快樂的shopping girl
穿上Vivienne Westwood,做個隨時逃婚的叛逆新娘
穿著LV長大的女孩,居然更想做個 sneaker girl
我拒絕做個憂傷的嫖客! | Just Play
和瓶子君一起,做個酷蓋 BottleDream創變思維課程限時優惠
nine percent首登跑男舞台,這個場景戳鹿晗痛處,粉絲:做個人吧
2019的小目標定起來,這5款車先來做個「單選題」!Which is your dish?
一日一look 和唐嫣一樣穿上條紋針織衫,做個chic girl!
SM做個人吧!red velvet拉裙子,nct行走殺馬特,泰民詭異大外套
誰說滑板是teenagers的專利?Elos 超迷你滑板,任誰都能做個「追風少年」
Saint Laurent 2018秋冬秀 做個個性酷女孩
【一日一Look】學唐嫣小粉裙配sneaker 做個不"作"的初夏女神
New Balance帥氣閃耀風上線!一起來做個酷女孩吧
一件大衣防風、抗凍、凹造型 寶寶也要做個 Fashion Baby
六一到了,給寶寶做個fashion髮型
聽媽媽的話 做個Good Boy
馮若熙:去倫藝學時裝設計,做個有態度的cool girl