【Web.路由】——路由模板

路由模板负责根据规则生成URL,从而使得请求可以正常访问到资源。

总之就是——》》》

规范如何写一个url,并且命名以方便进行管理。

在Asp.net core中的Http管道机制,UseRouting()和 UseEndpoints()这两个中间件来实现整个路由系统。关于asp.netCore中的路由的原理,可以看这篇文章。

在Web主机启动后,会进行路由配置,首先就是根据路由配置的URL模板去生成URL,并结合Controller和Action为终结点。

这个URL模板是在UseEndPoints()方法委托参数MapControllerRoute()方法配置的。

模板参数

在MapControllerRoute()方法中

(1). Name 称为路由模板的名称。
(2). Pattern 称为路由模板的 URL 模式,Pattern 本身的含义就是模式,这是在ASP.NET Core 3.x 及高版本修改后的参数名称。

(3). constrains:路由约束

。。。

在一个Web应用中,可以配置多个路由模板来适应多种URL,其中只需要Name不同即可。

URL模式

组成部分

(1). 一对花括号{}:必须存在,表示一个占位符。
(2). 路径分隔符:/,由分隔符隔开的称为段,必须存在路径分隔符,默认情况下控制器、操作和参数之间必须使用/作为路径分隔符,参数后面可以使用*来实现任意的 URL 段_>任意格式的URL
(3). 路由参数:如 controller、action,由于 MVC 中路由就是根据控制器和操作定位资源的,所以这 2 个参数必须存在,也可以有其它的路由参数。如controller=Home,controller 就是路由参数。
(4). 路由参数值:路由参数后面使用=赋值,这个值就是数由参数值。如controller=Home,Home 就是路由参数值。

(5). 可选参数:使用 ?跟随的称为可选参数,可有可无。如 id?表示 id 参数是可选的。

路由参数

必选参数

从这个路由模板来看,{controller}和{action}是约定的,不可省略或修改成别的名称

(1). {controller}表示控制器占位符,其中 controller 替换为控制器的具体名称,如 Home,就表示 HomeController 控制器,去掉后缀。
(2). {action}表示操作占位符,其中 action 替换为操作的具体名称,也就是控制器下操作方法的名称。如 Index,就表示 Index()操作方法。
(3). 同时,还给 controller 指定默认的值是 Home,action 指定默认值是Index。当在 URL 上未指定控制器和操作时,默认使用 Home 和 Index 访问。

当没有配置的时候,可能会返回一个未响应的页面。

可选参数

顾名思义,就是可以没有这个参数。

对于路由模板中的{id?}表示可选参数,也就是 id 这个参数可以有,也可以没有。

我们可以看一下默认的控制器中的方法

这个是在home控制器下,由于在 URL 上,id 参数是放在/Home/Index/后面的,所以就认为
id 是 Index()方法的参数,可以是任意类型。

在asp.net core的操作是——>

url——>控制器——>控制器中的方法——>参数绑定——>razor页面去将参数进行显示

比如到最后的razor中是

这样就将url中的id直接赋值到前端UI中了。

关于路径分隔符,固定URL段和通配符

对于正常的 URL 地址,都是由 / 分隔符将路由段分开的,因此——————>
在 URL 默认的模式中,也是使用 / 将控制器、操作、参数分开

使用规范的/ 

使用固定URL段

使用通配符*

使用通配符的注意事项

(1). 必须在{}内使用。
(2). 必须放在路由参数的前面。
(3). 路由参数不能是可选的。
(4). 必须是 URL 模式中最后一个 URL 段。

今天就分享到这里。同时欢迎关注gzh——》上位机PLC自动化技术研究

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/906371.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

c加加11第二弹~

1lambda 1.1.lambda表达式书写格式 [capture-list] (parameters) mutable -> return-type { statement} 1.2lambda表达式各部分说明 [capture-list] : 捕捉列表,该列表总是出现在lambda函数的开始位置,编译器根据[]来判断接下来的代码是否为lamb…

记录|多线程和异步简单理解

目录 前言一、单线程二、多线程-Thread多线程是都多少个的时候会导致性能变差 三、多线程-Task类Task的优势 四、异步- awaitawait注意:多个Task Run()天剑await后,变成了同步执行解决方法 更新时间 前言 参考视频:C#基础教程 多线程编程入门…

凸极式发电机的相量图分析和计算,内功率因数角和外功率因数角和功角的定义。

图1:同步发电机稳态相量图 若发电机为凸极式,由于凸极机正、交轴同步电抗不等,即xd≠xq,因此必须先借助虚构电动势 E ˙ Q E ˙ q − ( x d − x q ) I ˙ d \dot{E}_Q\dot{E}_q-(x_d-x_q)\dot{I}_d E˙Q​E˙q​−(xd​−xq​)…

C语言原码、反码和补码的详解

C语言原码、反码和补码的详解 放在最前面的1、前言正数的原码、反码和补码负数的原码、反码和补码 2、整数的原码(2.1)原码的定义(2.2)计算原码 3、整数的反码(3.1)反码的定义(3.2)计…

idea 导入Spring源码遇到的坑并解决

1.下载相关文件 通过百度网盘分享的文件:Spring 链接:https://pan.baidu.com/s/1r9rkGOCaY9SFn9ecng5cIg?pwd8888 提取码:8888 2.配置gradle环境 gradle下载地址 需要翻墙下 https://services.gradle.org/distributions/ 我选择的是 grad…

Redis-“自动分片、一定程度的高可用性”(sharding水平拆分、failover故障转移)特性(Sentinel、Cluster)

文章目录 零、写在前面一、水平拆分(sharding/分片)、故障转移(failover)机制介绍水平拆分(Sharding)故障转移机制 二、Redis的水平拆分的机制有关的配置1. 环境准备2. 配置文件配置3. 启动所有Redis实例4. 创建集群5. 测试集群读/写6. 集群管理 三、Red…

C++STL详解(九)map和set的使用

一.关联式容器的介绍 CSTL包含了序列式容器和关联式容器&#xff1a; 序列式容器里面存储的是元素本身&#xff0c;其底层是线性的数据结构&#xff0c;就譬如我们之前学习的vector&#xff0c;list&#xff0c;deque等等。关联式容器里面存储的是<key,value>的键值对&…

goframe开发一个企业网站 模版界面4

###goframe已有了模板的功能 {{"string"}} // 一般 string {{raw string}} // 原始 string {{c}} // byte {{print nil}} // nil 也被支持 {{. | FuncA | FuncB | FuncC}}{{if .condition}}... {{else}}{{if .condition2}}...{{end}} {{end}}{{rang…

一、k8s快速入门之学习Kubernetes组件基础

一、三个容器管理器平台 Apache MESOS 开源的分布式资源管理框架&#xff0c;被推特选为基础平台&#xff0c;2019年推特换位k8s&#xff0c;MESOS最新版可以在MESOS上管理k8sDOCKER SWARM docker总部发行的&#xff0c;实现docker的集群方案&#xff0c;和docker捆版一起&…

初始JavaEE篇——多线程(7):定时器、CAS

找往期文章包括但不限于本期文章中不懂的知识点&#xff1a; 个人主页&#xff1a;我要学编程程(ಥ_ಥ)-CSDN博客 所属专栏&#xff1a;JavaEE 目录 定时器的使用 定时器的原理 模拟实现定时器 CAS 介绍 CAS的应用场景 解析 AtomicInteger 类 实现自旋锁 CAS的缺陷…

【UGUI】为射击游戏添加动态显示的分数和血量到UI界面

项目背景 在这个项目中&#xff0c;我们希望实现一个简单的游戏系统&#xff0c;其中玩家可以通过击中目标来获得分数&#xff0c;同时通过与怪物碰撞来减少血量。分数和血量需要在游戏界面上实时显示&#xff0c;以便玩家能够随时了解自己的状态。 技术实现 1. 静态变量的使…

stm32引脚PB3、PB4、PA15作为普通IO口用时,需要先解除调试端口复用

当项目调试的时候&#xff0c;发现PA15引脚无论配置输出高还是低或者输入&#xff0c;均只能输出3.3V的高电平。 目前STM的硬件调试有两种方法&#xff0c;JTAG和SW的方式&#xff0c;目前个人认为最好的方式就是SW&#xff0c;因为它只占用PA13和PA14两个IO。而JTAG还要多占用…

MATLAB与STK互联:仿真并获取低轨卫星与指定区域地面站的可见性数据

MATLAB控制STK实现&#xff1a;仿真并获取低轨卫星与指定区域地面站的可见性数据 本次仿真主要参考了多篇文献和网站&#xff0c;包括但不限于&#xff1a;《Using MATLAB for STK Automation》、CSDN博文&#xff1a; 拜火先知的博客_CSDN博客-笔记、AGI官网有关MATLAB的内容…

用Python设置、更新和获取Excel单元格的值

Excel工作簿作为一款广泛使用的数据管理工具&#xff0c;与Python相结合&#xff0c;可以使得自动化处理大量数据成为可能。通过Python来设置、更新以及读取Excel单元格的值&#xff0c;不仅可以极大地提高工作效率&#xff0c;减少重复劳动&#xff0c;还能增强数据处理流程的…

Golang | Leetcode Golang题解之第525题连续数组

题目&#xff1a; 题解&#xff1a; func findMaxLength(nums []int) (maxLength int) {mp : map[int]int{0: -1}counter : 0for i, num : range nums {if num 1 {counter} else {counter--}if prevIndex, has : mp[counter]; has {maxLength max(maxLength, i-prevIndex)} …

提升网站安全性 HTTPS的重要性与应用指南

内容概要 在如今数字化快速发展的时代&#xff0c;网站安全显得尤为重要。许多用户在访问网站时&#xff0c;尤其是涉及个人信息或金融交易时&#xff0c;对数据传输的安全性有着高度的关注。HTTPS&#xff08;超文本传输安全协议&#xff09;正是为了满足这种需求而诞生的。通…

DICOM标准:解析DICOM属性中的病人模块

目录 病人模块概述 1. 病人关系模块&#xff08;Patient Relationship Module&#xff09; 2. 病人识别模块&#xff08;Patient Identification Module&#xff09; 3. 病人统计模块&#xff08;Patient Demographic Module&#xff09; 4. 病人医学模块&#xff08;Pati…

编写高性能爬虫抓取股票行情数据

最近给一个私募大佬帮忙做了一些股票交易有关的系统&#xff0c;其中涉及到行情数据抓取的问题&#xff0c;一番摸索之后&#xff0c;把成果在这里做个分享。 我把行情抓取的部分&#xff0c;和一个写手记的小功能&#xff0c;单独拿了出来放在一个小系统里面&#xff0c;可以…

人像摄影笔记(自用)

相机的原理&#xff1a;镜头--CMOS传感器---通过ISP的计算 然后通过手机的GPU处理后呈现出图片的形式 镜头&#xff1a;定焦和变焦&#xff0c;变焦分为光学变焦和数字变焦 光学变焦&#xff1a;焦距变了 画质不变 数字变焦&#xff1a;焦距不变 裁剪画质 数字变焦一…

前端埋点与监控最佳实践:从基础到全流程实现.

前端埋点与监控最佳实践&#xff1a;从基础到全流程实现 大纲 我们会从以下三个方向来讲解埋点与监控的知识&#xff1a; 什么是埋点&#xff1f;什么是监控&#xff1f; JS 中实现监控的核心方案 写一个“相对”完整的监控实例 一、什么是埋点&#xff1f;什么是监控&am…