当前位置: 首页 > news >正文

Wix网站开发 工作室黑龙江住房和城乡建设厅网站

Wix网站开发 工作室,黑龙江住房和城乡建设厅网站,wordpress代码块插件,谷歌浏览器下载这篇文章,我们来讲一讲什么是路由。 路由是 将用户请求地址映射为一个请求委托的过程,负责匹配传入的Http请求,然后将这些请求发送到应用的可执行终结点。 这里需要注意一个内容,发送到应用的可执行终结点。 路由的分类&#x…

这篇文章,我们来讲一讲什么是路由。

路由是

将用户请求地址映射为一个请求委托的过程,负责匹配传入的Http请求,然后将这些请求发送到应用的可执行终结点。

这里需要注意一个内容,发送到应用的可执行终结点。 

路由的分类:

常规路由和属性路由,

常规路由

常规路由在asp.net core程序中可以看出是

app.MapControllerRoute(
name: "default",
pattern: "{controller=Home}/{action=Index}/{id?}");

以上是简化的模式,原先模式为

app.UseEndpoints(endpoints =>
{
endpoints.MapControllerRoute(
name: "default"
,
pattern: "{controller=Student}/{action=Index}/{id?}");
});

 思路就是一个控制器将指定的URL进行解析,真正进行终结点的操作就是通过使用useEndpoints()了实现。

属性路由

在创建的程序中,我们可以看到属性路由的终结点定义如下

app.UseEndpoints(endpoints =>
{
endpoints.MapControllers();
});

简化后如下

app.MapControllers();

 对于RESTFul API,微软推荐使用属性路由,它在控制器或操作上定义。

那么什么是终结点路由呢?

终结点路由

我们先看一下这段代码

f3078cc8621140d48b0db41722ef9652.png

在此代码中,其中有 2 个是与路由相关的中间件:
(1). UseRouting()中间件。
(2). MapControllerRoute()中间件。

这 2 个中间件是成对出现的,相互依赖,缺谁都不能完整的实现路由功能。

网上查找信息后发现:

必须先执行 UseRouting(),再执行 MapControllerRoute()。UseAuthorization()授权中间件是要放在二者中间的,对于生成的终结点进行授权,以便在执行时是带有权限的。在执行 UseRouting()中间件时,也会执行 MapControllerRoute()中间件,二者是一体的,不可分开执行。之所以在注册时分开,是因为微软推出的管道式编程,提供更大的扩展性,允许开发者在 UseRouting()和 MapControllerRoute()之间加入其它中间件获取 HttpContext 对象做一些其它的操作。

路由服务

路由服务是在 Program.cs 中使用 builder.Services.AddRouting()注册的,只是默认在 builder 之前已经注册过了,无需我们再次注册。

AddRouting()方法必须在 UseRouting()方法之前运行,它是路由的基础服务。

UseRouting

此方法中会在IApplicationBuilder 注册一个名称为EndpointRoutingMiddleware 的中间件,核心功能是

(1). 在执行 UseRouting()时,也会执行 UseEndpoints(),所以会根据 URL 格式(也就是 MapControllerRoute()方法中配置的)将整个应用程序中的所有 Controller(控制器)和 Action(操作)转换为对应的终结点
(Endpoint)。
(2). 建立请求路径与终结点之间的关系,以便 HTTP 请求到达后能够寻找到正确的终结点。
(3). 创建一个 matcher 对象,用于匹配HTTP 请求的路径,也就是根据传过来的 HTTP 请求路径匹配到正确的终结点。
(4). 使用的是 SetEndpoint()方法将终结点附加到 HttpContext 当前上下文。

一句话总结,UseRouting()的功能就是根据 HTTP 请求匹配到正确的终结点。如果向看一下到时候路由过去的终结点是在哪里,可以在program中加入以下代码

app.Use((context, next) => {
//得到终结点
var endpoint = context.GetEndpoint();
//得到路由数据
var routeData = context.Request.RouteValues;
return next();
});

在这里,构建好了一个 RequestDelegate 委托,这个就是供UseEndpoints()中间件最终执行的请求委托,类型是Func<HttpCotnext,Task>

所以根据以上分析,就可以得出——>

一个终结点就是一个处理请求的委托,其中包含控制器,action和attribute等。

UseEndpoints()

在这里你可能会有个疑问,就是我请求了,到了终结点了,该怎么返回给我才能响应到前端?

在 UseEndpoints()方法中注册了一个 EndpointMiddleware 中间件用于执行请求委托。
从 UseRouting()执行后得到最终与当前请求匹配的终结点,在UseEndpoints()中调用终结点的委托处理请求,从而找到执行的控制器和操作,得到响应的结果并返回给用户。

前文中说到,为什么要成对出现

(1). UseRouting()中间件。
(2). MapControllerRoute()中间件。

那是因为(1)是为了将所有的终结点存放在endPoint.DataSource属性中,而在UseEndPoints中,——》再存入到RouteOptions集合中。经过了UseRouting和MapControllerRoute执行后,整个应用程序的路由表就生成了,之后就可以匹配到终结点,从而执行相应的请求委托。

如果中间存在UseAuthorization(),会增加一个校验来做判断是否有权限执行,没有将直接返回。

 

 

http://www.yayakq.cn/news/398815/

相关文章:

  • 多语种网站怎么做搜索引擎排名wordpress滑动注册
  • 移动网站cms外贸出口流程12步骤图
  • 有哪些做室内设计好用的网站有哪些邢台网站制作哪里有
  • 如何建设网站简介优化网站建设公司
  • 抖音号出售网站一呼百应网做的网站
  • 十二师建设局网站拼多多运营
  • 关于jsp网站开发的最新书籍赣州人才网最新招聘
  • 驻马店网站开发公司电话网站建设搭建步骤
  • 顺德网站开发福州做网站的公司多少钱
  • 服务器安装完面板怎么做网站新昌品牌网站建设
  • 网站后台功能模块设计14亿人口新冠死多少
  • 厦门it做网站最强网站建设 中企动力中山
  • 网站 逻辑结构七台河新闻综合频道直播
  • 服务专业的网络建站公司h5自己制作模板
  • 网站做熊掌号码白银网站运行
  • 百度不收录网站吗鹤壁市城乡一体化示范区官网入口
  • 交互式网站开发技术有哪些外贸开发网站公司
  • 有没有个人做网站赚钱湘潭公司网站建设
  • 广告传媒建设网站手表网站海马300米潜水表
  • 做网站的怎么获取客户信息宣传部总结网站建设
  • 网站建设费用申请成都网站建设公司推荐
  • 黑龙江省建设安全教育信息网张家界seo优化
  • 事业单位报名网站长泰人才网597最新招聘信息
  • 网站建设结论及体会关于网站建设领导分工
  • 大型网站开发案例深圳品牌策划设计
  • 东莞人才网站湖北做网站系统哪家好
  • wordpress哪个模版好用优化设计五年级上册数学答案
  • 江西华邦网站建设百度营销登录平台
  • 三五互联网站管理登录地址城市建设协会网站
  • 信息平台网站的建设 文档怎样提高自己网站排名