.Net 6 WebApi 路由统一添加路由前缀

18 篇文章 3 订阅

背景:在实际API使用时,会存在对API进行管理维护,同时,api的路由地址可能会进行分组辨认(例如前缀统一加api或者业务名称);如果对每一个控制器进行路由特性标识比较麻烦且费时间,不容易维护。

解决:可以通过统一设置路由前缀,具体步骤如下:

1. 在.net 6 WebApi项目中添加继承IApplicationModelConvention的类,实现路由前缀添加:

  public class RouteConvention : IApplicationModelConvention
    {
        private readonly AttributeRouteModel _routePrefix;
        /// <summary>
        /// 构造方法
        /// </summary>
        /// <param name="routeTemplateProvider"></param>
        public RouteConvention(IRouteTemplateProvider routeTemplateProvider)
        {
            _routePrefix = new AttributeRouteModel(routeTemplateProvider);
        }
        public void Apply(ApplicationModel application)
        {
            //遍历所有的 Controller
            foreach (var controller in application.Controllers)
            {
                // 已经标记了 RouteAttribute 的 Controller
                var matchedSelectors = controller.Selectors.Where(x => x.AttributeRouteModel != null).ToList();
                if (matchedSelectors.Any())
                {
                    foreach (var selectorModel in matchedSelectors)
                    {
                        // 在当前路由上 再 添加一个路由前缀
                        selectorModel.AttributeRouteModel = AttributeRouteModel.CombineAttributeRouteModel(_routePrefix, selectorModel.AttributeRouteModel);
                    }
                }

                // 没有标记 RouteAttribute 的 Controller
                var unmatchedSelectors = controller.Selectors.Where(x => x.AttributeRouteModel == null).ToList();
                if (unmatchedSelectors.Any())
                {
                    foreach (var selectorModel in unmatchedSelectors)
                    {
                        // 添加一个路由前缀
                        selectorModel.AttributeRouteModel = _routePrefix;
                    }
                }
            }
        }
    }

2. 添加自定义路由扩展静态类

   /// <summary>
    /// 自定义路由扩展类
    /// </summary>
    public static class MvcOptionsExtensions
    {
        /// <summary>
        /// 使用自定义路由扩展方法
        /// </summary>
        /// <param name="opts"></param>
        /// <param name="routeAttribute"></param>
        public static void UseCentralRoutePrefix(this MvcOptions opts, IRouteTemplateProvider routeAttribute)
        {
            // 添加我们自定义 实现IApplicationModelConvention的RouteConvention
            opts.Conventions.Insert(0, new RouteConvention(routeAttribute));
        }
    }

3. 在Program.cs中添加控制器时注册上述自定义扩展方法:

builder.Services.AddControllers(opt =>
{
    // 统一设置路由前缀
    opt.UseCentralRoutePrefix(new RouteAttribute("apiv2"));
});

4.这样所有控制器中的action路由前边都会加一个apiv2

 

 

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
好的,以下是一个基本的 .NET Core Web API 的示例: 1. 打开 Visual Studio 9 2. 选择 "新建项目" 3. 在 "新建项目" 窗口中,选择 "ASP.NET Core Web 应用程序" 4. 命名你的应用程序,并选择 "API" 作为项目类型 5. 点击 "创建" 现在你已经有了一个基本的 .NET Core Web API 项目。接下来,我们需要创建一个控制器来处理 HTTP 请求。按照以下步骤操作: 1. 在解决方案中,右键单击 "Controllers" 文件夹 2. 选择 "添加" -> "新建项" 3. 在 "新建项" 窗口中,选择 "ASP.NET Core" -> "控制器类" 4. 命名你的控制器,并选择 "API Controller - 空" 作为模板 5. 点击 "添加" 现在你已经有了一个控制器类。在这个类中,你可以定义可以处理 HTTP 请求的方法。例如,以下是一个简单的控制器类,它包含一个 Get 方法,该方法返回一个字符串: ```csharp using Microsoft.AspNetCore.Mvc; [ApiController] [Route("[controller]")] public class HelloWorldController : ControllerBase { [HttpGet] public string Get() { return "Hello, World!"; } } ``` 这个控制器类使用了两个属性:`[ApiController]` 和 `[Route("[controller]")]`。这些属性告诉 ASP.NET Core,这是一个 API 控制器,并且这个控制器的路由前缀应该是控制器的名称。 现在你可以运行你的应用程序,并在浏览器中访问 `https://localhost:5001/helloworld`,你应该可以看到 "Hello, World!" 的输出。 这只是一个简单的例子,但它演示了如何创建一个基本的 .NET Core Web API。你可以在控制器类中定义更多的方法来处理不同的 HTTP 请求,并返回不同的数据。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值