Loading

abp去除默认rootPath:app(修改路由路径)

  • 需要继承Abp原生类 ConventionalRouteBuilder
/// <summary>
    /// Abp原生路由,去除rootPath:app
    /// </summary>
    public class ConventionalRouteBuilderExt : ConventionalRouteBuilder
    {
        public ConventionalRouteBuilderExt(IOptions<AbpConventionalControllerOptions> options) : base(options)
        {
        }

        public override string Build(string rootPath, string controllerName, ActionModel action, string httpMethod, ConventionalControllerSetting configuration)
        {
            var controllerNameInUrl = NormalizeUrlControllerName(rootPath, controllerName, action, httpMethod, configuration);

            var url = $"api/{NormalizeControllerNameCase(controllerNameInUrl, configuration)}";

            //Add {id} path if needed
            var idParameterModel = action.Parameters.FirstOrDefault(p => p.ParameterName == "id");
            if (idParameterModel != null)
            {
                if (TypeHelper.IsPrimitiveExtended(idParameterModel.ParameterType, includeEnums: true))
                {
                    url += "/{id}";
                }
                else
                {
                    var properties = idParameterModel
                        .ParameterType
                        .GetProperties(BindingFlags.Instance | BindingFlags.Public);

                    foreach (var property in properties)
                    {
                        url += "/{" + NormalizeIdPropertyNameCase(property, configuration) + "}";
                    }
                }
            }

            //Add action name if needed
            var actionNameInUrl = NormalizeUrlActionName(rootPath, controllerName, action, httpMethod, configuration);
            if (!AbpStringExtensions.IsNullOrEmpty(actionNameInUrl))
            {
                url += $"/{NormalizeActionNameCase(actionNameInUrl, configuration)}";

                //Add secondary Id
                var secondaryIds = action.Parameters
                    .Where(p => p.ParameterName.EndsWith("Id", StringComparison.Ordinal)).ToList();
                if (secondaryIds.Count == 1)
                {
                    url += $"/{{{NormalizeSecondaryIdNameCase(secondaryIds[0], configuration)}}}";
                }
            }

            return url;
        }
    }
  • 依赖注入替换
    HttpApiHostModule中执行
   context.Services.AddTransient<IConventionalRouteBuilder, ConventionalRouteBuilderExt>();
posted @ 2022-11-11 11:57  灭霸  阅读(481)  评论(0)    收藏  举报