WebApi框架概述

WebApi框架,可分为三层:托管层、消息处理程序托管层、控制器处理层。

 

一、托管层:

即Host,是WebAPI宿主,如:控制台,Windows服务等。

寄宿方式。

1、定制托管。

2、自托管。

3、Web托管

Owin寄宿 ,如Katana, 在一个Owin兼容的服务器上建立一个WebApi层,生成HttRequestMessage,WebApi处理完毕后,把HttpResponseMessage写入 Owin上下文。

 

WebApi相关对象(负责框架与外表数据交换的载体,Http包的托管封装):

1)HttRequestMessage

  WebAPI封装的请求对象(从Http请求包解析而来,对应之前HttpWebRequest,在System.Net.Http中)

2)HttpResponseMessage

    WebAPI封装的返回对象(从托管代码最终生成的http返回请求对象,由框架转换为http响应包)。

 

二、消息处理程序托管层

 

HttpServer:WebApi 消息处理通道,可在此出添加扩展处理程序,如代理,网关,缓存处理,访问记录。

核心对象:HttpMessageHandler 类。

              DelegatingHandler抽象类, 用于构建处理链,通过InnerHanlder属性进行传递,责任链模式实现

 

处理流程:

1 HttpRequestMessage

 

2、myDelegatingHandler1

    myDelegatingHandler2

    myDelegatingHandler3

 

3、路由分发处理程序

  1)控制器选择(HttpRoutingDispacher)

         

4、控制分发处理程序   

      1)控制器选择(HttpControllerDispacher)

    ControllerSelector (工厂模式实现)=> ControllerDescription (工厂模式实现)。

      2)错误处理。

 

5、HttpResponseMessage

  4、=> 3、=> 2、=> 5、

 

三、控制器处理层

1、根据上下文信息,定位控制器中要请求的方法;

 

ApiController

实现IHttpController接口。

功能:身份认证,授权认证,模型检查。

1)格式化

2)模型绑定

  参数映射为对象模型,如 Hotel类型

     媒体类型解析。

3)筛选器。

   IActionFilter接口,权限验证等。

 

----------------

核心对象介绍:

HttpMessageHandler核心类,针对请求的处理实现在SendAsync中,针对响应的处理通过返回类型Task<HttpResponseMessage>完成
HttpRequestMessageContent属性封装Http主体信息
HttpResponseMessageStatusCode、ReasonPhrase属性表示响应状态码与描述
DelegatingHandler用于构建处理链,通过InnerHanlder属性进行传递,是责任链模式的实现
HttpServerDispatcher属性指向最终的分发器对象,Configuration属性包含了所有的配置信息。
HttpConfiguration

全局配置信息:托管层、消息处理程序管道层、控制器处理层等配置。

转载于:https://www.cnblogs.com/coolen/p/5609814.html

框架适用于中小项目使用。 框架包含: Swagger,JWT权限验证 ,Sqlsugar+异步泛型仓储,Redis做数据缓存,AutoFac,AOP的切面redis缓存等 仓储层: repository就是一个管理数据持久层的, 它负责数据的CRUD(Create, Read, Update, Delete) service layer是业务逻辑层, 它常常需要访问repository层。有网友这么说:Repository(仓储):协调领域和数据映射层,利用类似与集合的接口来访问领域对象。Repository 是一个独立的层,介于领域层与数据映射层(数据访问层)之间。 它的存在让领域层感觉不到数据访问层的存在,它提供一个类似集合的接口提供给领域层进行领域对象的访问Repository 是仓库管理员,领域层需要什么东西只需告诉仓库管理员,由仓库管理员把东西拿给它,并不需要知道东西实际放在哪。 业务逻辑层: 就是和我们平时使用的三层架构中的BLL层很相似。 Service层只负责将Repository仓储层的数据进行调用,至于如何是与数据库交互的, 它不去管,这样就可以达到一定程度上的解耦,假如以后数据库要换, 比如MySql,那Service层就完全不需要修改即可。 实体Model数据层: Enity文件夹中,存放的是整个项目的数据库表实体类。 VeiwModels文件夹,是存放的DTO实体类,在开发中,一般接口需要接收数据,返回数据,如果直接使用实体类返回的话弊端很大,不仅把重要信息暴露出去(比如手机号等),还对数据造成冗余(比如我需要接收用户的生日,还需要具体的年、月、日这就是三个字段,当然您也可以手动拆开,这只是一个栗子,所以不能直接用数据库实体类接收),就用到了DTO类的转换。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值