ASP.NET Core中三个egg疼的路由函数

简介: ASP.NET Core中三个egg疼的路由函数

端点路由app.UseEndpoints强调的是端点和路由,它的核心目的是将请求落地点与路由寻址方式解耦。在这里面有几个比较容易混淆的函数:


  • MapControllerRoute
  • MapDefaultControllerRoute
  • MapControllers


我相信很多开发人员不清楚它们有什么不同,以及该在什么时候用哪个。那么下面我们就来学习一下吧。


1.MapControllerRoute

它的官方定义是这样的,将控制器操作的终结点添加到Microsoft.AspNetCore.Routing.IEndpointRouteBuilder里,并指定具有给定名称、模式、默认值、约束和 dataTokens 的路由。

conventional routing(约定路由), 通常是用在MVC项目中的,需要向它传递name pattern defaults constraints dataTokens 参数。在项目中可以这样写:

endpoints.MapControllerRoute(
  name:"default",
  pattern:"{controller=Home}/{action=index}/{id?}"
);

当请求url满足{host}{controller_name}{action_name}{option_id}这样的格式时,将命中Controller=controller_name Action=action_name的方法,如果url没有提供controller和action名称,那么将会命中默认的home控制器中的index方法。简单地说这是MVC项目初期的写法,让用户发送请求的url去匹配Controller和Action。


但是约定路由并不非主流,这是因为约定路由对于用户来说并不友好,并且暴露了后端开发者定义的Controller和Action名称。而且实际上不应该让用户的url去匹配Controller和Action名称,应该让开发者去匹配用户想要使用的url,这样就是特性路由。


2.MapDefaultControllerRoute

官方的定义是这样的:将控制器操作的终结点添加到Microsoft.AspNetCore.Routing.IEndpointRouteBuilder中,并添加默认路由 {controller=Home}/{action=Index}/{id?}。

endpoints.MapDefaultControllerRoute()是上面约定路由的默认样例.


3.MapControllers

官方定义是这样的:将控制器操作的终结点添加到 Microsoft.AspNetCore.Routing.IEndpointRouteBuilder中,并且不指定任何路由。不对约定路由做任何假设,也就是说不使用约定路由,而是依赖用户的特性路由, 它一般用在WebAPI项目中。


全文梳理就会发现: 官方英文描述屡次出现的route,其实特指的是约定路由。


这样的描述我其实是不苟同的:


路由在.NET里面, 已经被普世认定为“约定路由”和“特性路由”,基于这种认知,我读了好几遍官方英文描述,其实没读出个所以然的。


官方英文描述使用 “route”来特指“约定路由”会误导开发者。


目录
相关文章
|
3天前
|
消息中间件 前端开发 小程序
一个基于.NET Core构建的简单、跨平台、模块化的商城系统
今天大姚给大家分享一个基于.NET Core构建的简单、跨平台、模块化、完全开源免费(MIT License)的商城系统:Module Shop。
|
3天前
|
算法 C# 数据库
【干货】一份10万字免费的C#/.NET/.NET Core面试宝典
C#/.NET/.NET Core相关技术常见面试题汇总,不仅仅为了面试而学习,更多的是查漏补缺、扩充知识面和大家共同学习进步。该知识库主要由自己平时学习实践总结、网上优秀文章资料收集(这一部分会标注来源)和社区小伙伴提供三部分组成。该份基础面试宝典完全免费,发布两年来收获了广大.NET小伙伴的好评,我会持续更新和改进,欢迎关注我的公众号【追逐时光者】第一时间获取最新更新的面试题内容。
|
3天前
|
数据可视化 网络协议 C#
C#/.NET/.NET Core优秀项目和框架2024年3月简报
公众号每月定期推广和分享的C#/.NET/.NET Core优秀项目和框架(每周至少会推荐两个优秀的项目和框架当然节假日除外),公众号推文中有项目和框架的介绍、功能特点、使用方式以及部分功能截图等(打不开或者打开GitHub很慢的同学可以优先查看公众号推文,文末一定会附带项目和框架源码地址)。注意:排名不分先后,都是十分优秀的开源项目和框架,每周定期更新分享(欢迎关注公众号:追逐时光者,第一时间获取每周精选分享资讯🔔)。
|
3天前
|
开发框架 前端开发 JavaScript
JavaScript云LIS系统源码ASP.NET CORE 3.1 MVC + SQLserver + Redis医院实验室信息系统源码 医院云LIS系统源码
实验室信息系统(Laboratory Information System,缩写LIS)是一类用来处理实验室过程信息的软件,云LIS系统围绕临床,云LIS系统将与云HIS系统建立起高度的业务整合,以体现“以病人为中心”的设计理念,优化就诊流程,方便患者就医。
23 0
|
3天前
|
Linux API iOS开发
.net core 优势
.NET Core 的优势:跨平台兼容(Windows, macOS, Linux)及容器支持,高性能,支持并行版本控制,丰富的新增API,以及开源。
28 4
|
3天前
|
开发框架 人工智能 .NET
C#/.NET/.NET Core拾遗补漏合集(持续更新)
在这个快速发展的技术世界中,时常会有一些重要的知识点、信息或细节被忽略或遗漏。《C#/.NET/.NET Core拾遗补漏》专栏我们将探讨一些可能被忽略或遗漏的重要知识点、信息或细节,以帮助大家更全面地了解这些技术栈的特性和发展方向。
|
3天前
|
开发框架 中间件 .NET
C# .NET面试系列七:ASP.NET Core
## 第一部分:ASP.NET Core #### 1. 如何在 controller 中注入 service? 在.NET中,在ASP.NET Core应用程序中的Controller中注入服务通常使用<u>依赖注入(Dependency Injection)</u>来实现。以下是一些步骤,说明如何在Controller中注入服务: 1、创建服务 首先,确保你已经在应用程序中注册了服务。这通常在Startup.cs文件的ConfigureServices方法中完成。例如: ```c# services.AddScoped<IMyService, MyService>(); //
100 0
|
3天前
|
开发框架 前端开发 .NET
ASP.NET CORE 3.1 MVC“指定的网络名不再可用\企图在不存在的网络连接上进行操作”的问题解决过程
ASP.NET CORE 3.1 MVC“指定的网络名不再可用\企图在不存在的网络连接上进行操作”的问题解决过程
48 0
|
3天前
|
开发框架 前端开发 .NET
进入ASP .net mvc的世界
进入ASP .net mvc的世界
32 0
|
3天前
|
开发框架 前端开发 .NET
C# .NET面试系列六:ASP.NET MVC
<h2>ASP.NET MVC #### 1. MVC 中的 TempData\ViewBag\ViewData 区别? 在ASP.NET MVC中,TempData、ViewBag 和 ViewData 都是用于在控制器和视图之间传递数据的机制,但它们有一些区别。 <b>TempData:</b> 1、生命周期 ```c# TempData 的生命周期是短暂的,数据只在当前请求和下一次请求之间有效。一旦数据被读取,它就会被标记为已读,下一次请求时就会被清除。 ``` 2、用途 ```c# 主要用于在两个动作之间传递数据,例如在一个动作中设置 TempData,然后在重定向到另
121 5