asp.net core mvc之路由
一、默认路由 (Startup.cs文件)
routes.MapRoute(name: "default",template: "{controller=Home}/{action=Index}/{id?}"
);
默认访问可以匹配到
https://localhost:44302/home/index/1
https://localhost:44302/home/index
https://localhost:44302/home
https://localhost:44302
也可以匹配到
https://localhost:44302/course/learn/1
1、创建 course 控制器
Controllers文件夹下右键-,添加控制器->
-》CourseController.cs
->
2、创建learn视图
在Views文件夹下,新建 Course 文件夹,然后右键 。 添加-》视图-》learn.cshtml
@{ViewData["Title"]= "学习";
}<h1>学习页面内容</h1>
二、案例博客路由
1、在 Startup.cs 文件下配置博客路由
//防止输入https://localhost:44302/home跳到博客专用路由
routes.MapRoute(name: "home",template: "home", //https://localhost:44302/home,跳到Home控制器中Index方法defaults: new { controller = "Home", action = "Index" });//博客专用路由
routes.MapRoute(name:"blog",template:"{name}", //https://localhost:44302/博客名,跳到Blog控制器中Index方法defaults: new { controller ="Blog",action="Index"});
2、Controllers文件夹右键,添加-》控制器 BlogController.cs
public class BlogController : Controller{public IActionResult Index(string name){ViewData["BlogName"] = name;return View();}}
3.Views文件夹下添加Blog文件夹右键,添加-》视图 Index.cshtml
<h1>@ViewData["BlogName"]博客</h1>
三、特性路由
特性路由:在Action添加标注,来指定路由规则
1、Startup.cs 文件中 app.UseMvc(删除全部路由);
2、在Action添加标注
public class HomeController : Controller
{[Route("")][Route("home")][Route("home/index")]public IActionResult Index(){return View();}[Route("home/abc")]//https://localhost:44302/home/abcpublic IActionResult About(){ViewData["Message"] = "Your application description page.";return View();}
}
注意:
A、如果2个方法有相同标注,为防止冲突,可以这样做
[HttpPost("home/abc")]
B、特性路由参数
//学习
[Route("course/learn/{id}")] //https://localhost:44302/course/learn/1
public IActionResult learn(int id)
{return View();
}
四、组合路由
组合路由:在 Controller 和Action 上添加路由标注
//课程
[Route("c")]
public class CourseController : Controller
{[Route("index")] // https://localhost:44302/c/index[Route("/idd")] // 以/开头的不是组合路由 https://localhost:44302/iddpublic IActionResult Index(){return View();}
}
五、路由模板中使用标记替换
在路由模板中使用
[controller] 表示和控制器同名的名称
[action] 表示和Action同名的名称
[area] 表示和区域同名的名称
[Route("[controller]")]
public class CourseController : Controller
{[Route("[action]")] // https://localhost:44302/course/indexpublic IActionResult Index(){return View();}
}
还可以在控制器上面使用多个路由特性,实现多个地址匹配一个控制器
[Route("[controller]")]
[Route("more")] // https://localhost:44302/more/index
public class CourseController : Controller
{[Route("[action]")] // https://localhost:44302/course/indexpublic IActionResult Index(){return View();}
}
还可以这样写
[Route("[controller]/[action]")] //https://localhost:44302/course/index
//也可以放到方法上
public class CourseController : Controller
{public IActionResult Index(){return View();}
}
六、自定义路由特性
通过创建一个实现了IRouteTemplateProvider的类。然后在类里面配置Template和Order还有Name这三个属性就可以实现特性标注了。
只要那个类或者Action增加了这个自定义标注就可以自动设置上面的Template特性。
1、在项目下添加 core 文件夹,然后添加 MyRouteAttribute.cs 类,实现 IRouteTemplateProvider
namespace FirstCoreMvc.core
{public class MyRouteAttribute : Attribute, IRouteTemplateProvider{public string Template => "www/[controller]/[action]";public int? Order {get;set;}public string Name { get; set; }}
}
2、调用
public class BlogController : Controller{[MyRoute] //https://localhost:44302/www/blog/indexpublic IActionResult Index(string name){ViewData["BlogName"] = name;return View();}}
七、生成Url
生成url,实际应用在视图中生成链接的地址
public IActionResult Index()
{//return Content(Url.Action("index")); // /home//return Content(Url.Action("index", "home")); // /homereturn Content(Url.Action("index", "course", new { id = 1, name = "lili" }));// /course/index/1?name=lili 和我想像/course/index?id=1&1name=lili不一样,有人知道吗?}
八、区域的使用
1、点击项目右键-》添加-》新搭建基架的项目-》MVC区域-》添加-》区域名称:Manage
2、添加控制器视图
namespace FirstCoreMvc.Areas.Manage.Controllers
{[Area("Manage")] //需要添加区域注释,否则会和外边路由冲突public class HomeController : Controller{public IActionResult Index(){return View();}}
}
注意:[Area("Manage")] 需要添加区域注释,否则会和外边路由冲突
3、startup.cs文件中路由设置
//区域路由 放到上面routes.MapAreaRoute("mange_area","Manage","manage/{controller=Home}/{action=Index}/{id?}");
相关文章:

asp.net core mvc之路由
一、默认路由 (Startup.cs文件) routes.MapRoute(name: "default",template: "{controllerHome}/{actionIndex}/{id?}" ); 默认访问可以匹配到 https://localhost:44302/home/index/1 https://localhost:44302/home/index https:…...
前端设计模式之【访问者模式】
文章目录 前言介绍实现优缺点应用场景后言 前言 hello world欢迎来到前端的新世界 😜当前文章系列专栏:前端设计模式 🐱👓博主在前端领域还有很多知识和技术需要掌握,正在不断努力填补技术短板。(如果出现错误&#…...

通过docker-compose部署elk日志系统,并使用springboot整合
ELK是一种强大的分布式日志管理解决方案,它由三个核心组件组成: Elasticsearch:作为分布式搜索和分析引擎,Elasticsearch能够快速地存储、搜索和分析大量的日志数据,帮助用户轻松地找到所需的信息。 Logstash…...

【NLP】特征提取: 广泛指南和 3 个操作教程 [Python、CNN、BERT]
什么是机器学习中的特征提取? 特征提取是数据分析和机器学习中的基本概念,是将原始数据转换为更适合分析或建模的格式过程中的关键步骤。特征,也称为变量或属性,是我们用来进行预测、对对象进行分类或从数据中获取见解的数据点的…...

数据结构-单链表
1 链表的概念及结构 概念:链表是一种物理存储结构上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的 。 从以上图片可以看出: 1.链式结构在逻辑上是连续的,但在物理上不一定是连续的。 2.现实中的节…...

红队系列-IOT安全深入浅出
红队专题 设备安全概述物联网设备层次模型设备通信模型 渗透测试信息收集工具 实战分析漏洞切入点D-link 850L 未授权访问 2017 认证绕过认证绕过 D-link DCS-2530Ltenda 系列 路由器 前台未授权RTSP 服务未授权 访问 弱口令命令注入思科 路由器 固件二进制 漏洞 IoT漏洞-D-Lin…...

亚数受邀参加“长三角G60科创走廊量子密码应用创新联盟(中心)”启动仪式
11月8日,在第六届中国国际进口博览会2023长三角G60科创走廊高质量发展要素对接大会上,亚数信息科技(上海)有限公司CEO翟新元作为密码企业代表之一受邀参加“长三角G60科创走廊量子密码应用创新联盟(中心)”…...
直方图学习
直方图均衡化(Histogram Equalization)是一种用于增强图像对比度的图像处理技术,通过重新分配图像的像素值,使图像中的亮度级别更加均匀,以改善图像的视觉质量。下面是进行直方图均衡化的一般步骤: 计算原始…...

Java / Android 多线程和 synchroized 锁
s AsyncTask 在Android R中标注了废弃 synchronized 同步 Thread: thread.start() public synchronized void start() {/*** This method is not invoked for the main method thread or "system"* group threads created/set up by the VM. Any new functionali…...

基于51单片机的万年历-脉搏计仿真及源程序
一、系统方案 1、本设计采用51单片机作为主控器。 2、DS1302采集年月日时分秒送到液晶1602显示。 3、按键年月日时分秒,心率报警上下限。 4、红外对接管传感器采集心率送到液晶1602显示。 5、心率低于下限或高于上限,蜂鸣器报警。 二、硬件设计 原理图如…...

【ARFoundation学习笔记】点云与参考点
写在前面的话 本系列笔记旨在记录作者在学习Unity中的AR开发过程中需要记录的问题和知识点。主要目的是为了加深记忆。其中难免出现纰漏,更多详细内容请阅读原文以及官方文档。 汪老师博客 文章目录 点云新建点云 参考点参考点的工作原理何时使用参考点使用参考点…...

uni-app:js实现数组中的相关处理-数组复制
一、slice方法-浅拷贝 使用分析 创建一个原数组的浅拷贝,对新数组的修改不会影响到原数组slice() 方法创建了一个原数组的浅拷贝,这意味着新数组和原数组中的对象引用是相同的。因此,当你修改新数组中的对象时,原数组中相应位置的…...
8 STM32标准库函数 之 实时时钟(RTC)所有函数的介绍及使用
8 STM32标准库函数 之 实时时钟(RTC)所有函数的介绍及使用 1. 图片有格式2 文字无格式二、RTC库函数固件库函数预览2.1 函数RTC_ITConfig2.2 函数RTC_EnterConfigMode2.3 函数RTC_ExitConfigMode2.4 函数RTC_GetCounter.2.5 函数RTC_SetCounter2.6 函数RTC_SetPrescaler2.7 函…...

ARMday04(开发版简介、LED点灯)
开发版简介 开发板为stm32MP157AAA,附加一个拓展版 硬件相关基础知识 PCB PCB( Printed Circuit Board),中文名称为印制电路板,又称印刷线路板,是重要的电子部件,是电子元器件的支撑体,是电子…...
国际腾讯云:云服务器疑似被病毒入侵问题解决方案!!!
云服务器可能由于弱密码、开源组件漏洞的问题被黑客入侵,本文介绍如何判断云服务器是否被病毒入侵,及其解决方法。 问题定位 使用 SSH 方式 或 使用 VNC 方式 登录实例后,通过以下方式进行判断云服务器是否被病毒入侵: rc.loca…...

Perl语言用多线程爬取商品信息并做可视化处理
首先,我们需要使用Perl的LWP::UserAgent模块来发送HTTP请求。然后,我们可以使用HTML::TreeBuilder模块来解析HTML文档。在这个例子中,我们将使用BeautifulSoup模块来解析HTML文档。 #!/usr/bin/perl use strict; use warnings; use LWP::User…...

认识计算机-JavaEE初阶
文章目录 一、计算机的发展史二、冯诺依曼体系(Von Neumann Architecture)三、CPU基本工作流程3.1 算术逻辑单元(ALU)3.2 寄存器(Register)和内存(RAM)3.3 控制单元(CU)3…...
you-get - 使用代码下载视频
文章目录 关于 you-get代码调用报错处理 源码简单分析 关于 you-get github : https://github.com/soimort/you-get you-get 是一个有名的开源视频下载工具包,这里不赘述。 代码调用 you-get 提供了命令行的方式下载视频,这里介绍使用 Python 调用源代…...

【Proteus仿真】【51单片机】汽车尾灯控制设计
文章目录 一、功能简介二、软件设计三、实验现象联系作者 一、功能简介 本项目使用Proteus8仿真51单片机控制器,使用按键、LED模块等。 主要功能: 系统运行后,系统运行后,系统开始运行,K1键控制左转向灯;…...

浙大恩特客户资源管理系统任意文件上传漏洞复现
0x01 产品简介 浙大恩特客户资源管理系统是一款针对企业客户资源管理的软件产品。该系统旨在帮助企业高效地管理和利用客户资源,提升销售和市场营销的效果。 0x02 漏洞概述 浙大恩特客户资源管理系统中fileupload.jsp接口处存在文件上传漏洞,未经身份认…...

Mybatis逆向工程,动态创建实体类、条件扩展类、Mapper接口、Mapper.xml映射文件
今天呢,博主的学习进度也是步入了Java Mybatis 框架,目前正在逐步杨帆旗航。 那么接下来就给大家出一期有关 Mybatis 逆向工程的教学,希望能对大家有所帮助,也特别欢迎大家指点不足之处,小生很乐意接受正确的建议&…...

MMaDA: Multimodal Large Diffusion Language Models
CODE : https://github.com/Gen-Verse/MMaDA Abstract 我们介绍了一种新型的多模态扩散基础模型MMaDA,它被设计用于在文本推理、多模态理解和文本到图像生成等不同领域实现卓越的性能。该方法的特点是三个关键创新:(i) MMaDA采用统一的扩散架构…...

通过 Ansible 在 Windows 2022 上安装 IIS Web 服务器
拓扑结构 这是一个用于通过 Ansible 部署 IIS Web 服务器的实验室拓扑。 前提条件: 在被管理的节点上安装WinRm 准备一张自签名的证书 开放防火墙入站tcp 5985 5986端口 准备自签名证书 PS C:\Users\azureuser> $cert New-SelfSignedCertificate -DnsName &…...

GAN模式奔溃的探讨论文综述(一)
简介 简介:今天带来一篇关于GAN的,对于模式奔溃的一个探讨的一个问题,帮助大家更好的解决训练中遇到的一个难题。 论文题目:An in-depth review and analysis of mode collapse in GAN 期刊:Machine Learning 链接:...

ABAP设计模式之---“Tell, Don’t Ask原则”
“Tell, Don’t Ask”是一种重要的面向对象编程设计原则,它强调的是对象之间如何有效地交流和协作。 1. 什么是 Tell, Don’t Ask 原则? 这个原则的核心思想是: “告诉一个对象该做什么,而不是询问一个对象的状态再对它作出决策。…...

使用python进行图像处理—图像变换(6)
图像变换是指改变图像的几何形状或空间位置的操作。常见的几何变换包括平移、旋转、缩放、剪切(shear)以及更复杂的仿射变换和透视变换。这些变换在图像配准、图像校正、创建特效等场景中非常有用。 6.1仿射变换(Affine Transformation) 仿射变换是一种…...

操作系统期末版
文章目录 概论处理机管理进程线程处理机调度生产者消费者问题 死锁简介死锁的四个必要条件解决死锁的方法 存储管理链接的三种方式静态链接装入时动态链接运行时链接 装入内存的三种方式绝对装入可重定位装入动态运行时装入 覆盖交换存储管理方式连续分配**分段存储管理方式***…...
笔记:算法题目中需要处理 int 某个位的三种方法:for、while、to_string
int n; cin >> n; 1. 使用for观察高位、低位、本位 for(int i 1; i < n; i * 10){ //i 1 当前位为个位, i 10 为十位,以此类推 high n / (i * 10); //这是相对于 i 的高位,例如 i 为个位…...
鼠标的拖动效果
1、变量的设置 let isDragging false; let startX; let startY; let endX; let endY; let box null;isDragging : 表示是否推拽startX、startY:表示起始坐标,相对于元素endX、endY:表示结束坐标,相对于元素box&…...

基于单片机的病房呼叫系统(源码+仿真)
该系统由以 STM32F4 为平台的监控终端以及以 CC2530 为平台的无线传感网组成。系统上电后自动完成 ZigBee 网络的组建、终端节点的加入,病人可利用便携式的病人终端发出呼叫求助请求信息、节点在线信息以及对护士的服务评价信息等,这些信息通过路由节点发…...