5.9K Star 11.7K Fork 4K

GVPdotNET China / Furion

 / 详情

路由前缀全局配置(DefaultRoutePrefix)与控制器中自定义[route("xxx")]路径能否同时生效?

已完成
创建于  
2022-05-26 10:09

Furion 版本号

哪个版本号?
V3.3.0

Web 项目类型

  • WebApi
  • Mvc
  • Razor Pages
  • Blazor Server
  • MinApp

描述你的问题

路由前缀全局统一配置只有在动态控制器没有 [route("xx")] 和方法上没有 [route][HttpGet/HttpPost] 标记时才生效。

"DynamicApiControllerSettings": {
    "DefaultRoutePrefix": "mp"
  }

输入图片说明

api路径:
输入图片说明

异常堆栈信息

测试项目代码

"DynamicApiControllerSettings": {
    "DefaultRoutePrefix": "mp"
}
  /// <summary>
    /// 系统服务接口
    /// </summary>
    //[Route("sys")] 
    public class SystemAppService : IDynamicApiController
    {
        private readonly ISystemService _systemService;
        public SystemAppService(ISystemService systemService)
        {
            _systemService = systemService;
        }

        /// <summary>
        /// 获取系统描述
        /// </summary>
        /// <returns></returns>
       //[HttpGet("getDesc")]
        public string GetDescription(string name)
        {
            return _systemService.GetDescription(name);
        }
    }

数据库信息

  • Sqlite
  • SqlServer
  • Mysql
  • Oracle
  • PGSql
  • Firebird
  • Cosmos

期待结果

能否路由前缀全局配置(DefaultRoutePrefix)与控制器中自定义[route("xxx")]路径同时生效。
如同时配置:
输入图片说明
输入图片说明

最后路径为:
输入图片说明


评论 (10)

djf 创建了任务

实际上 Furion 底层的处理是这样的:

1、100% 和微软的行为一致
2、如果自定义了 [Route][HttpMethod] 的话,那么就以自定义为标准,不会添加任何东西进来。


话又说回来,您的需求也是合理的,也就是前缀默认情况下都应该加上去,我可以在下一个版本添加一个 ForceWithRoutePrefix 的参数,意思是强制添加默认前缀

已解决,将在下一个版本发布,支持两种配置:

  • 局部配置 [ApiDescriptionSettings(ForceWithRoutePrefix = true)]
using Furion.DynamicApiController;
using Microsoft.AspNetCore.Mvc;

namespace Furion.Application
{
    [Route("sys"), ApiDescriptionSettings(ForceWithRoutePrefix = true)]
    public class TestRouteMethod : IDynamicApiController
    {
        [HttpGet("getDesc")]
        public string GetDescription()
        {
            return "Furion";
        }

        public string GetDescription2()
        {
            return "Furion";
        }
    }
}
  • 全局配置:
{
  "DynamicApiControllerSettings": {
    "ForceWithRoutePrefix": true
  }
}

代码解决该 Issue 提交记录:0253479

输入图片说明

将在 v3.4.1 版本发布

百小僧 任务状态待办的 修改为已完成
百小僧 修改了描述

v3.4.1 版已经发布

输入图片说明输入图片说明输入图片说明
全局前缀没有生效

我明白了,不能用“/” 开头

发现点小问题,如果只定义 Route的时候,全局前缀就无效了。输入图片说明
只要定义一个,就可以生效了,不过方法的变量提示会丢失
输入图片说明

这个功能就到此为止了。

因为如果你定义了 [Route] 相当于你自定义完全自定义了路由规则,asp.net core 规定只要定义了 route ,那么 action 就必须定义 [HttpMethod] ,这个功能不再继续,因为会导致和微软底层完全不兼容,也背离了 Furion 100% 兼容的原则,新版本会移除该 Issue 所有功能

另外输入图片说明 这个并不是丢失,而是一定你自定义了 [HttpGet] ,那么该 Action 完全交给 MVC 托管,默认生成的是 [FromQuery] 而不是 [FromPath] ,你展开即可看到。

登录 后才可以发表评论

状态
负责人
里程碑
Pull Requests
关联的 Pull Requests 被合并后可能会关闭此 issue
分支
开始日期   -   截止日期
-
置顶选项
优先级
参与者(3)
974299 monksoul 1578937227
C#
1
https://gitee.com/dotnetchina/Furion.git
git@gitee.com:dotnetchina/Furion.git
dotnetchina
Furion
Furion

搜索帮助