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/abc
        public 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/idd
    public IActionResult Index()
    {
       return View();
    }
}

五、路由模板中使用标记替换


在路由模板中使用
[controller] 表示和控制器同名的名称
[action] 表示和Action同名的名称
[area] 表示和区域同名的名称

[Route("[controller]")]
public class CourseController : Controller
{
     [Route("[action]")]  // https://localhost:44302/course/index
     public IActionResult Index()
     {
            return View();
     }
}

还可以在控制器上面使用多个路由特性,实现多个地址匹配一个控制器

[Route("[controller]")]
[Route("more")]  // https://localhost:44302/more/index
public class CourseController : Controller
{
     [Route("[action]")]  // https://localhost:44302/course/index
     public 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/index
        public 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")); //  /home

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

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

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

相关文章

PTL货位指引标签为仓储管理打开新思路

PTL货位指引标签是一种新型的仓储管理技术&#xff0c;它通过LED灯光指引和数字显示&#xff0c;为仓库管理带来了全新的管理思路和效率提升&#xff0c;成为现代物流仓库管理中的重要工具。 首先&#xff0c;PTL货位指引标签为仓储管理业务带来了管理新思路。传统的仓库管理中…

OFDM深入学习及MATLAB仿真

文章目录 前言一、OFDM 基本原理及概念1、OFDM 简介2、子载波3、符号4、子载波间隔与符号长度之间的关系 二、涉及的技术1、保护间隔2、交织3、信道编码4、扩频5、导频6、RF&#xff08;射频&#xff09;调制7、信道估计 三、变量间的关系四、IEEE 802.11a WLAN PHY 层标准五、…

matlab中的mapminmax函数初步理解和应用

matlab中的mapminmax函数初步认识 一、mapminmax 顾名思义&#xff1a;映射最大最小 二、语法及举例 2.1 语法1 [Y,PS] mapminmax(X) 将矩阵X映射形成矩阵Y, Y中每行中的最小值对应-1&#xff0c;最大值对应1。PS是一个包含映射信息的结构体。 举例&#xff1a; clc cle…

Jupyter Notebook 闪退

造成这个的原因非常非常多&#xff01; 比如什么环境变量没有配置&#xff0c;或者说jupyter和python版本不兼容&#xff0c;库不兼容等等。 但是我呢&#xff0c;以上都不是。 我是因为手残&#xff0c;删掉了不该删的文件&#xff1a; 这个操作就是打开"Anaconda Prom…

在react中组件间过渡动画如何实现?

一、是什么 在日常开发中&#xff0c;页面切换时的转场动画是比较基础的一个场景 当一个组件在显示与消失过程中存在过渡动画&#xff0c;可以很好的增加用户的体验 在react中实现过渡动画效果会有很多种选择&#xff0c;如react-transition-group&#xff0c;react-motion&…

Vb6 TCP Server服务端监听多个RFID读卡器客户端上传的刷卡数据

本示例使用设备介绍&#xff1a;WIFI无线4G网络RFID云读卡器远程网络开关物流网阅读器TTS语音-淘宝网 (taobao.com) Option ExplicitConst BUSY As Boolean False 定义常量 Const FREE As Boolean TrueDim ConnectState() As Boolean 定义连接状态 Dim ServerSendbuf(…

Kubernetes实战(四)-部署docker harbor私有仓库

1 Docker原生私有仓库Registry 1.1 原生私有仓库Registry概述 Docker的仓库主要分两类&#xff1a; 私有仓库公有仓库 共有仓库只要在官方注册用户&#xff0c;登录即可使用。但对于仓库的使用&#xff0c;企业还是会有自己的专属镜像&#xff0c;所以私有库的搭建也是很有…

数字化广告运营,小迈科技的关键一步

数据驱动广告运营是小迈科技提升整体经营效率、构建竞争优势的重要选择。 截止目前&#xff0c;小迈科技已经完成了数据驱动的广告运营体系的搭建&#xff0c;并通过与神策数据的深入合作&#xff0c;借力神策客户旅程分析平台&#xff0c;在广告投放、运营活动等各个环节实现了…

网络安全从业者用于学习和了解可以访问的顶级黑客论坛

黑客论坛目前已经成为了网络犯罪者的数字聚集地。在这些论坛上我们可以看见最新的数据泄露事件,软件的漏洞,以及黑客教程。下面我将向大家分享目前还可以访问的顶级黑客论坛,网络安全从业者用于学习和了解。 1.XSS.is(俄罗斯黑客论坛) 推出时间:2013年,2018年9月重新推出…

Jdk 1.8 for mac 详细安装教程(含版本切换)

Jdk 1.8 for mac 详细安装教程&#xff08;含版本切换&#xff09; 官网下载链接 https://www.oracle.com/cn/java/technologies/downloads/#java8-mac 一、选择我们需要安装的jdk版本&#xff0c;这里以jdk8为例&#xff0c;下载 macOS 版本&#xff0c;M芯片下载ARM64版本…

centos7安装docker容器

卸载老版本&#xff1a; $ sudo yum remove docker \docker-client \docker-client-latest \docker-common \docker-latest \docker-latest-logrotate \docker-logrotate \docker-engine/var/lib/docker/路径下存在镜像、数据卷、容器等&#xff0c;在卸载的时候是不会自动删除…

不同规模的企业如何借助宁盾LDAP统一用户认证实现安全和效率需求?

中小企业要解决安全和业务效率问题&#xff0c;须提前规划软件基础设施&#xff0c;其中最基础的部分是建立统一账号和统一用户身份认证体系。这个体系相当于在软件系统之间建立了一套统一的身份标准&#xff0c;基于这套标准创建的账号让员工方便、高效地访问公司内的大部分软…

【解密ChatGPT】:从过去到未来,揭示其发展与变革

&#x1f38a;专栏【ChatGPT】 &#x1f33a;每日一句&#xff1a;天行健,君子以自强不息,地势坤,君子以厚德载物 ⭐欢迎并且感谢大家指出我的问题 文章目录 一、ChatGPT的发展历程 二、ChatGPT的技术原理 三、ChatGPT的应用场景 四、ChatGPT的未来趋势 五、总结 引言:随着…

基于SSM的高校疫情防控出入信息管理系统(有报告)。Javaee项目。

演示视频&#xff1a; 基于SSM的高校疫情防控出入信息管理系统&#xff08;有报告&#xff09;。Javaee项目。 项目介绍&#xff1a; 采用M&#xff08;model&#xff09;V&#xff08;view&#xff09;C&#xff08;controller&#xff09;三层体系结构&#xff0c;通过Sprin…

三天打鱼两天晒网

文章目录 前言一、题目描述 二、题目分析 三、解题 程序运行代码 前言 本系列为选择结构编程题&#xff0c;点滴成长&#xff0c;一起逆袭。 一、题目描述 二、题目分析 三、解题 程序运行代码 #include<stdio.h> int main(){int n;scanf("%d",&n);i…

开发常用的 3种 API 监控报告- Eolink Apikit

API 监控报告是一种监测 API 异常的工具。在 API 管理中&#xff0c;查看 API 异常监控的监控报告&#xff0c;是 Eolink Apikit 常用的功能。Eolink Apikit 的监控报告有3种&#xff1a; 单接口监控报告 流程监控报告 项目监控报告 1、单接口监控报告 单接口监控报告通常关…

jira Licenses更新步骤

有时候我们不想花钱使用jira,那么只有通过一个月以续期的方式来使用jira。下面提供下自己实测的方式 1、获取License Key 登录地址&#xff1a;https://my.atlassian.com 登录自己的Google账号&#xff0c;进入到下面账号&#xff0c;然后点击“New Trial License” product上…

C/C++轻量级并发TCP服务器框架Zinx-游戏服务器开发004:游戏核心消息处理 - 玩家类的实现

文章目录 0 代码仓库1 需求2 AOI设计2.1 AOI算法简介2.2 AOI数据结构及实现2.2.1 玩家2.2.2 网格对象2.2.3 游戏世界矩形2.2.4 获取周围玩家的实现2.2.5 代码测试 2.3 GameRole结合AOI创建玩家2.3.1 创建游戏世界全局对象-GameRole继承AOIWorld的Player2.3.2 把玩家到游戏世界的…

聊聊MySQL中的死锁

欢迎关注微信公众号&#xff1a;互联网全栈架构 死锁是指两个或者多个事务互相持有对方所需的资源&#xff0c;从而导致它们都无法继续执行的情况。下图是一个死锁的示例&#xff0c;事务1锁住了id1的数据&#xff08;比如更新id1的数据记录&#xff09;&#xff0c;同时请求锁…

【数据结构】树与二叉树(一):树(森林)的基本概念:父亲、儿子、兄弟、后裔、祖先、度、叶子结点、分支结点、结点的层数、路径、路径长度、结点的深度、树的深度

文章目录 5.1 树的基本概念5.1.1 树的定义树有序树、无序树 5.1.2 森林的定义5.1.3 树的术语1. 父亲&#xff08;parent&#xff09;、儿子&#xff08;child&#xff09;、兄弟&#xff08;sibling&#xff09;、后裔&#xff08;descendant&#xff09;、祖先&#xff08;anc…