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?}");

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

idea使用gradle教程 (idea gradle springboot)2024

这里白眉大叔&#xff0c;写一下我工作时候idea怎么使用gradle的实战步骤吧 ----windows 环境----------- 1-本机安装gradle 环境 &#xff08;1&#xff09;下载gradle Gradle需要JDK的支持&#xff0c;安装Gradle之前需要提前安装JDK8及以上版本 https://downloads.gra…

【遮天】叶凡首次高燃时刻,暴打姜峰逼其下跪,故事逐渐燃情

Hello,小伙伴们&#xff0c;我是小郑继续为大家深度解析国漫资讯。 深度爆料&#xff0c;《遮天》国漫30集剧情最新内容解析&#xff0c;前面剧情中&#xff0c;叶凡被姜峰如疯狗一般追杀&#xff0c;他像一只被狼群追逐的鹿&#xff0c;在山林中亡命逃窜。身后是姜峰那歇斯底…

el-date-picker精确到分钟

0 效果 1 代码 使用format、value-format属性格式化即可 :clearable“false” // 取消删除图标 注意&#xff1a; format&#xff1a;“yyyy-MM-dd HH:mm” 小时默认是从00:00开始 format&#xff1a;“yyyy-MM-dd hh:mm” 小时默认是从12:00开始

torch.cumprod实现累乘计算

cumprod取自“cumulative product”的缩写&#xff0c;即“累计乘法”。 数学公式为&#xff1a; y i x 1 x 2 x 3 . . . x i y_ix_1\times{x_2}\times{x_3}\times{...}\times{x_i} yi​x1​x2​x3​...xi​ 官方链接&#xff1a;torch.cumprod 用法&#xff1a; impo…

代码随想录训练营Day1:二分查找与移除元素

本专栏内容为&#xff1a;代码随想录训练营学习专栏&#xff0c;用于记录训练营的学习经验分享与总结。 文档讲解&#xff1a;代码随想录 视频讲解&#xff1a;二分查找与移除元素 &#x1f493;博主csdn个人主页&#xff1a;小小unicorn ⏩专栏分类&#xff1a;C &#x1f69a…

基于CLIP的图像分类、语义分割和目标检测

OpenAI CLIP模型是一个创造性的突破&#xff1b; 它以与文本相同的方式处理图像。 令人惊讶的是&#xff0c;如果进行大规模训练&#xff0c;效果非常好。 在线工具推荐&#xff1a; Three.js AI纹理开发包 - YOLO合成数据生成器 - GLTF/GLB在线编辑 - 3D模型格式在线转换 - 3D…

算法进阶指南图论 道路与航线

其实再次看这题的时候。想法就是和强连通分量有关&#xff0c;我们很容易发现&#xff0c;题目中所说的双向边&#xff0c;就构成了一个强连通分量&#xff0c;而所谓的单向边&#xff0c;则相当于把强连通分量进行缩点&#xff0c;然后整个图成为了一个DAG&#xff0c;众所周知…

go程序获取工作目录及可执行程序存放目录的方法-linux

简介 工作目录 通常就是指用户启动应用程序时&#xff0c;用户当时所在的文件夹的绝对路径。 如&#xff1a;root用户登录到linux系统后&#xff0c;一顿cd&#xff08;change directory&#xff09;后, 到了/tmp文件夹下。此时&#xff0c;用户要启动某个应用程序&#xff0…

Mybatis-Plus同时使用逻辑删除和唯一索引的问题及解决办法

1 问题背景 在开发中&#xff0c;我们经常会有逻辑删除和唯一索引同时使用的情况。但当使用mybatis plus时&#xff0c;如果同时使用逻辑删除和唯一索引&#xff0c;会报数据重复Duplicate entry的问题。 举例来说&#xff0c;有表user&#xff0c;建立唯一索引&#xff08;u…

Qt实现动态桌面小精灵(含源码)

目录 一、设计思路 二、部分源码演示 三、源码地址 🌈write in front🌈 🧸大家好,我是三雷科技.希望你看完之后,能对你有所帮助,不足请指正!共同学习交流. 🆔本文由三雷科技原创 CSDN首发🐒 如需转载还请通知⚠️ 📝个人主页:三雷科技🧸—CSDN博客 🎁欢…

了解高防服务器的工作原理

在当今互联网时代&#xff0c;网络安全问题日益突出&#xff0c;各种网络攻击层出不穷。为了保护企业的网络安全&#xff0c;高防服务器应运而生。那么&#xff0c;你是否了解高防服务器的工作原理呢?下面就让我们一起来探索一下。 高防服务器是一种能够有效抵御各种网络攻击的…

万界星空科技MES系统软件体系架构及应用

MES系统是数字化车间的核心。MES通过数字化生产过程控制&#xff0c;借助自动化和智能化技术手段&#xff0c;实现车间制造控制智能化、生产过程透明化、制造装备数控化和生产信息集成化。生产管理MES系统主要包括车间管理系统、质量管理系统、资源管理系统及数据采集和分析系统…

C语言编写一个程序采集招聘信息

因为在这里无法详细解释每行代码和步骤。但是&#xff0c;我可以给大家一个使用Python和requests库编写的简单爬虫程序的例子&#xff0c;它可以从网站上获取招聘信息。你可以根据这个例子&#xff0c;将其改写为使用C语言编写的爬虫程序。 import requests# 指定爬虫IP信息 pr…

软件测试|测试方法论—边界值

边界值分析法是一种很实用的黑盒测试用例方法&#xff0c;它具有很强的发现故障的能力。边界值分析法也是作为对等价类划分法的补充&#xff0c;测试用例来自等价类的边界。 这个方法其实是在测试实践当中发现&#xff0c;Bug 往往出现在定义域或值域的边界上&#xff0c;而不…

“锡安主义”贝尔福宣言希伯来抵抗运动犹太启蒙改革运动奋锐党闪米特人雅利安人

目录 “锡安主义” 贝尔福宣言 希伯来抵抗运动 犹太启蒙改革运动 奋锐党 闪米特人 雅利安人 “锡安主义” “锡安主义”是一种政治和民族运动&#xff0c;旨在支持并促进犹太人建立自己的国家并在历史上与宗教上的祖先之地——巴勒斯坦地区建立一个独立的国家。这一运动…

nginx图片资源管理转发

目标: 服务器上面 /home/images 里面作为文件资源管理器 代码: server {listen 80;server_name hello.world.cn;#apple-app和接口的关联文件location ~.*(images/miniapp)*\.(gif|jpg|jpeg|png)$ {root /home/;try_files $uri $uri/ 404;add_header Cache-Control &q…

“第六十四天” 字扩展和位扩展,外部存储器

存储器和CPU的连接; 现在的计算机MAR&#xff0c;MDR通常集成在CPU内部。存储芯片内只需一个普通的寄存器&#xff08;暂存输入&#xff0c;输出数据&#xff09;。 位扩展&#xff0c;字扩展&#xff0c;字位同时扩展&#xff1b; 位扩展&#xff1a; 位扩展的增加的是主存的…

unity【动画】脚本_角色动画控制器 c#

首先创建一个代码文件夹Scripts 从人物角色Player的基类开始 创建IPlayer类 首先我们考虑到如果不挂载MonoBehaviour需要将角色设置成预制体实例化到场景上十分麻烦&#xff0c; 所以我们采用继承MonoBehaviour类的角色基类方法写代码 也就是说这个脚本直接绑定在角色物体…

经典OJ题:随机链表的复制

目录 题目&#xff1a; 本题的解图关键在于画图与看图&#xff01; 思路分析&#xff1a; 方法一&#xff1a;暴力求解法。 方法二&#xff1a;插入法 方法解析&#xff1a; 步骤一、插入 步骤二、 处理每一个copy的randdom指针⭐————重点 步骤三、拆卸节点 代码…