DOTNET Core MVC(二)路由初探
搁置了几天,工作忙的一塌糊涂,今天终于抽空来继续看看MVC的知识。先来看看MVC的路由是如何处理的。以下为替代的路由:
app.UseEndpoints(endpoints =>
{
endpoints.MapControllerRoute(
name: "default",
pattern: "{controller=Home}/{action=Index}/{id?}");
});
通过Configure方法在运行时,以委托的形式注册。
UseEndpoints:将中间件添加到的IApplicationBuilder再调用该方法时,需要先调用UseRouting。
public static IApplicationBuilder UseRouting(this IApplicationBuilder builder)
{
if (builder == null)
{
throw new ArgumentNullException(nameof(builder));
}
VerifyRoutingServicesAreRegistered(builder);//校验是否加载完成
var endpointRouteBuilder = new DefaultEndpointRouteBuilder(builder);
builder.Properties[EndpointRouteBuilder] = endpointRouteBuilder;
return builder.UseMiddleware<EndpointRoutingMiddleware>(endpointRouteBuilder);
}
将Microsoft.AspNetCore.Routing.EndpointRoutingMiddleware中间件添加到指定的IApplicationBuilder中。
private static void VerifyRoutingServicesAreRegistered(IApplicationBuilder app)
{
// Verify if AddRouting was done before calling UseEndpointRouting/UseEndpoint
// We use the RoutingMarkerService to make sure if all the services were added.
if (app.ApplicationServices.GetService(typeof(RoutingMarkerService)) == null)
{
throw new InvalidOperationException(Resources.FormatUnableToFindServices(
nameof(IServiceCollection),
nameof(RoutingServiceCollectionExtensions.AddRouting),
"ConfigureServices(...)"));
}
public static IApplicationBuilder UseEndpoints(this IApplicationBuilder builder, Action<IEndpointRouteBuilder> configure)
{
if (builder == null)
{
throw new ArgumentNullException(nameof(builder));
}
if (configure == null)
{
throw new ArgumentNullException(nameof(configure));
}
VerifyRoutingServicesAreRegistered(builder);
VerifyEndpointRoutingMiddlewareIsRegistered(builder, out var endpointRouteBuilder);
configure(endpointRouteBuilder);
// Yes, this mutates an IOptions. We're registering data sources in a global collection which
// can be used for discovery of endpoints or URL generation.
//
// Each middleware gets its own collection of data sources, and all of those data sources also
// get added to a global collection.
var routeOptions = builder.ApplicationServices.GetRequiredService<IOptions<RouteOptions>>();
foreach (var dataSource in endpointRouteBuilder.DataSources)
{
routeOptions.Value.EndpointDataSources.Add(dataSource);
}
return builder.UseMiddleware<EndpointMiddleware>();
}
ASP.NET Core 3使用完善的终结点路由,通常可以对应用程序内部的路由提供更多控制。端点路由分为两个单独的步骤:
在第一步中,再次匹配所请求的路由和配置的路由,找出以访问正在的路由。在最后一步中,对确定的路由进行评估,并调用相应的中间件。
两个步骤独立,允许其他中间件在这些点之间起作用。允许中间件利用来自一个子的端点路由信息来处理授权,而不必执行实际的处理程序。
app.UseRouting()将注册运行逻辑路由路由的中间件。
app.UseEndpoints()将执行该路由。
MapControllerRoute:添加端点控制器操作的IEndpointRouteBuilder 并指定与路由给定name,pattern, defaults,constraints,和dataTokens。
其他:
MapController将添加到属性路由的控制器支持。
MapController将添加到该属性路由的控制器支持。
MapControllerRoute 添加控制器的常规路由
原创。转载请注明出处。
啰嗦一堆,就说了两个方法,下一篇接着说路由的用法〜

DOTNET Core MVC(二)路由初探的更多相关文章
- ASP.NET Core MVC的路由参数中:exists后缀有什么作用,顺便谈谈路由匹配机制
我们在ASP.NET Core MVC中如果要启用Area功能,那么会看到在Startup类的Configure方法中是这么定义Area的路由的: app.UseMvc(routes => { ...
- Docker 部署Dotnet Core MVC项目
原文:Docker 部署Dotnet Core MVC项目 1.dotnet core创建项目 dotnet new mvc -o myweb cd myweb 然后就是业务代码的编辑,增删改查乱七八 ...
- ASP.NET Core MVC 之路由(Routing)
ASP.NET Core MVC 路由是建立在ASP.NET Core 路由的,一项强大的URL映射组件,它可以构建具有理解和搜索网址的应用程序.这使得我们可以自定义应用程序的URL命名形式,使得它 ...
- DOTNET Core MVC (一)
以控台的形式,运行.net core mvc 代码, Host.CreateDefaultBuilder(args) .ConfigureWebHostDefaults(webBuilder => ...
- .net core mvc 区域路由设置(配置)
写博客原因:添加了区域(用作后台)后,报错: An unhandled exception occurred while processing the request.AmbiguousActionE ...
- WSL2 新建dotnet core mvc项目
我们知道dotnet sdk会有很多命令,但在我们完全不知道如何去使用哪个命令. 我们使用dotnet -h进行查看: 我们看到SDK的new命令,但是new命令又如何使用呢? 我们再次使用帮助: 可 ...
- dotnet core开发体验之开始MVC
开始 在上一篇文章:dotnet core多平台开发体验 ,体验了一把dotnet core 之后,现在想对之前做的例子进行改造,想看看加上mvc框架是一种什么样的体验,于是我就要开始诞生今天的这篇文 ...
- Asp.net Core MVC(三)UseMvc设置路由
在家办公,下班继续看点东西,不废话,继续看MVC的路由. asp.net核心mvc的路由是建立在asp.net核心的路由之上的.通过终结点加载路由中间件的配置方式在此不细说了,(DOTNET Core ...
- ASP.NET Core MVC/WebAPi如何构建路由?
前言 本节我们来讲讲ASP.NET Core中的路由,在讲路由之前我们首先回顾下之前所讲在ASP.NET Core中的模型绑定这其中有一个问题是我在项目当中遇见的,我们下面首先来看看这个问题. 回顾A ...
随机推荐
- Java入门 - 语言基础 - 16.数组
原文地址:http://www.work100.net/training/java-array.html 更多教程:光束云 - 免费课程 数组 序号 文内章节 视频 1 概述 2 声明数组变量 3 创 ...
- Java数组合并方法学习。
参考博客: https://blog.csdn.net/liu_005/article/details/72760392 https://blog.csdn.net/jaycee110905/arti ...
- 实验五:配置Eth-Trunk链路聚合(手工负载分担模式)
1.配置图 2.配置命令 LSW1的eth trunk 1配置如下: 配置命令如下: [S1]Eth-Trunk1 创建Eth-Trunk1端口 [S1-Eth-Trunk1]mode lacp-st ...
- 通过示例学习rholang(上部:课程0-6)
通过例子和实践来学习rho语言.下面的例子和练习都很值得去运行.阅读.修改和完善.修改练习和教程中任何你感到有意思的代码,这样能够获得最好的学习效果.该教程包含了rho语言最常见以及最重要的特性,足以 ...
- 解决luajit ffi cdata引用cdata的问题
使用luajit ffi会遇到cdata引用cdata的情况.官方说明是必须手动保存所有cdata的引用,否则会被gc掉. ffi.cdef[[ struct A { int id; }; struc ...
- Day4-Python3基础-装饰器、迭代器
今日内容: 1.高阶函数 2.嵌套函数 3.装饰器 4.生成器 5.迭代器 1.高阶函数 定义: a:把一个函数名当作实参传给函数 a:返回值包含函数名(不修改函数的调用方式) import time ...
- jdk8中CompletableFuture的各个API用法,极大扩展了Future
就不介绍了,直接贴代码,建议在代码中使用,真的很方便 package cn.hou.completablefuture; import org.junit.Test; import java.util ...
- CSS学习 | 思维导图
CSS样式
- Linux防火墙之iptables基本匹配条件和隐式扩展匹配条件
一.iptables的基本匹配条件 上一篇博文我们说到了iptables的基本工作原理.数据报文在内核的走向和管理链.管理规则.以及查看规则.导入和导出规则:回顾请参考https://www.cnbl ...
- k8s基本命令
kubernetes 常用命令 通过yaml文件创建: kubectl create -f xxx.yaml (不建议使用,无法更新,必须先delete) kubectl apply -f xxx.y ...