手机版

ASP.NET核心网络应用编程接口项目中配置全局路由的方法示例

时间:2021-08-29 来源:互联网 编辑:宝哥软件园 浏览:

一、前言

在开发项目的过程中,我创建了一个新的控制器,发现vs会直接给控制器头加上前缀,比如[Route('api/[controller]')],也就是在访问接口的时候,会变成http://localhost 33608000/API/values,但是如果控制器很多,或者我们要迭代版本的话,就会发现痛苦的时候到了。

如果此时可以全局配置前缀,这确实是一个好处。只需修改一个地方。为了实现这个目标,让我们使用它。

二、配置

0.让我们在配置之前先看看接口的前缀。建立一张地图来证明它

昂首阔步地打开它

1.我们需要使用IApplicationModelConvention,它位于Microsoft . aspnetcore . MVC . application models的命令空间下.

MVC框架中有一些约定,这个接口主要用来定义一些MVC约定。我们可以通过Apply方法中的ApplicationModel修改或者增加一些约定,MV框架本身在启动的时候会注入这个接口,方便我们使用。

然而,我们仍然必须看看我们可以在这个ApplicationModel对象中使用什么。让我们更进一步:

为了看看这是否酷,我们可以看看每个属性给出的解释

ApiExplorerModel:包括描述信息、组信息、可见性等。

ControllerModel:主要与Comtroller的违约合同有关。这个里面有很多东西,包括控制器名、路由值、Actions等。我们的下一个配置也将在这里扩展

IFilterMetadata:空接口,主要起到标签的作用。

2.配置

步骤1:定义一个类来实现IApplicationModelConvention接口。

///summary////全局路由前缀配置////summary公共类路由约定:应用模型约定{///summary////定义一个路由前缀变量////summary private readonly属性routemodel _ central prefix///summary ///在调用///summary///param name=' route template provider '/param public route conventi on(iroutetetemplateprovider route templateprovider){ _ centralPrefix=new attributeroute model(route templateprovider);}//接口{//的Apply方法public void apply(应用模型应用)遍历应用中的所有控制器foreach (var控制器)。控制器){//1,请注意控制器//,该控制器已标有RouteAttribute。如果控制器中已经标记了路线,则指定的路线内容将被添加到路线之前。var matchedSelectors=控制器。选择器。其中(x=x。属性路由模型!=null)。to list();if(matched selecters。any()){ foreach(matched selectors中的var selector model){//添加路由前缀选择器模型。attributeroutermodel=attributeroutermodel。combintributeroutemol(_ centralprefix,选择器模型。attributeroutemodel)添加到当前路由;}} //2,controller var不匹配的选择器=controller . selectors . where(x=x . attributeroutermodel==null)。to list();If(不匹配的选择器. any ()) {foreach(不匹配的选择器中的var选择器模型){//添加路由前缀选择器模型. attributeroutermodel=_ centralprefix;}}}}}注意这里的代码分为两部分,一是控制器有路由配置,二是没有路由配置。因此需要根据具体情况进行选择。

步骤2:在添加了上面的内容之后,让我们定义一个类来插入我们的路径。

这个方法主要扩展了MVCoptions类

public static class mvcopyinsextensions {///summary///extension method/////summary///param name=' opts '/param///param name=' route attribute '/param public static void UseCentralRoutePrefix(此MvcOptions opts,iroutetetemplatprovider route attribute){//add route conventi on opts . conventi on . insert(0,new route conventi on(route attribute)),它通过我们自己的定义实现了IApplicationModelConvention}}描述:routeAttribute是我们自定义的前缀内容。

步骤3:在启动时的ConfigureServices方法中添加配置信息

# region configure global route//为每个控制器添加前缀(在没有特定路由之前添加前缀)services . addmvc(opt={ opt . usecentralrouteprefix(new route attribute(' LG/v1/[action]')));//opt。UseCentralRoutePrefix(新的RouteAttribute(' API/[控制器]/[操作]));});#endregion说明:上面的方括号在此有效。内容可以定制。

第四步:跑步

1、原控制器路由前缀预留

2.删除原始路由前缀

三.摘要

至此,全局路由配置前缀已经很好地实现了。你可以开心地玩。

Github代码地址:github

以上就是本文的全部内容。希望对大家的学习有帮助,支持我们。

版权声明:ASP.NET核心网络应用编程接口项目中配置全局路由的方法示例是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。