Asp.net Core中的web开发框架一般用于创建B/S结构的应用程序(B表示浏览器端,S表示服务器端)。
我们可以用mvc框架,或者blazor框架开发一个web应用程序。用户想访问web应用程序的时候 ,就要使用浏览器输入网址找到你的应用程序。
也就是,浏览器向服务器端发送http请求,服务器去响应http请求。这个响应,时服务器端经过依次路由选择,来选择用户想要访问的资源(如图片,音乐,视频等)返回给浏览器。
然后浏览器再通过html返回给用户查看。用户请求响应在服务器中就是i选择正确的终结点。终结点是一个抽象的概念,类似于一个带着资源的委托。
简单来说,asp.Net Core的路由机制,就是
(1). 用户发起一个 HTTP 请求(包含请求的地址和一些附加信息)。
-------------------------------------------------------------------------
(2). HTTP 请求到达 Web 服务器后,路由系统开始工作:
1) 应用程序在第一次启动时,将所有的控制器下的操作组织在一起,按内
部规则转换为多个终结点,一个控制器+操作就是一个终结点。
2) 根据 URL 格式将生成的请求 URL 与终结点建立对应关系,此时已形成
一张路由表。
3) 当有请求 URL 进来后,就会在路由表中进行匹配,找到最佳终结点。4) 最后执行匹配到的终结点(请求委托),找到正确的资源。
5) 将资源返回给客户端(浏览器)。-------------------------------------------------------------------------
(3). 用户最终看到返回的结果(根据关键字在百度找到想要的内容)。
具体代码中,asp.net Core的路由系统是由 UseRouting()和UseEndpoints()这 2 个中间件处理的。
在 Program.cs 中,会生成通用主机和 Web 主机,而 ASP.NETCore Mvc 应用程序就是运行在 Web 主机上的。在构建 Web 主机后,会添加一个用于路由系统的基础服务,需要用AddRouting()方法注册。
于是在program中的配置如下
app.UseRouting();
app.MapControllerRoute(
name:"dafault",
pattern:"{controller=Home}/{action=Index}/{id?}");
UseRouting()和 MapControllerRoute()中间件必须联合执行,二者不可分开执行。
其中
(1). UseRouting():用于将收集应用程序中所有控制器下的操作,并转换为对
应的终结点,生成路由表,并根据当前请求路径匹配到最佳终结点。
(2). MapControllerRoute():执行匹配到的最佳终结点,找到资源。
如果增加了权限管理,一般在UseRouting和map之间使用 UseAuthorization()用于授权。
然后在program运行后,web主机就跑起来了。
当运行了这个程序,我们输入一个url,比如说是localhost:7015,他是默认访问/Home/Index下的资源。也就是说我们访问/Home/Index 时,会进入路由系统,根据这个请求路径(/Home/Index)在路由表中找到对应的终结点。然后执行终结点,找到 Index()操作
而index操作是在控制器(controller中)实现的。而此控制器下的Index操作返回的是默认视图,index.cshtml——>里面我们编写razor语言,通过razor视图处理过后得到html再返回给浏览器。
最终得到的结果,返回到前端给用户看到的,就是解析后的结果了