DOTNET Core MVC(二)路由初探

DOTNET Core MVC(二)路由初探,第1张

概述搁置了几天,工作忙的一塌糊涂,今天终于抽空来继续看看MVC的知识。先来看看MVC的路由是如何处理的。以下为替代的路由: app.UseEndpoints(endpoints => { endpo

搁置了几天,工作忙的一塌糊涂,今天终于抽空来继续看看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 =  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)) ==  InvalIDOperationException(Resources.FormatUnabletoFindServices(            nameof(IServiceCollection),nameof(RoutingServiceCollectionExtensions.AddRouting),ConfigureServices(...)));    }
static IApplicationBuilder UseEndpoints(this IApplicationBuilder builder,Action<IEndpointRouteBuilder> configure){     ArgumentNullException(nameof(builder));    }    if (configure ==  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 并指定与路由给定namepattern,  defaultsconstraints,和dataTokens

其他:

MapController将添加到属性路由的控制器支持。

MapController将添加到该属性路由的控制器支持。

MapControllerRoute 添加控制器的常规路由

原创。转载请注明出处。

啰嗦一堆,就说了两个方法,下一篇接着说路由的用法〜

 

总结

以上是内存溢出为你收集整理的DOTNET Core MVC(二)路由初探全部内容,希望文章能够帮你解决DOTNET Core MVC(二)路由初探所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1214537.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-05
下一篇 2022-06-05

发表评论

登录后才能评论

评论列表(0条)

保存