如何全局配置 ASP.NET Core 6+ API 路由,使其在从控制器名称生成时格式化为短横线大小写?

Gee*_*ard 5 c# rest .net-core asp.net-core

我有一个 ASP.NET Core 6 Web API 项目。一些端点与名称由多个单词组成的控制器相关,因此按照 .NET 中的约定采用 PascalCase 格式。假设我有一个PackageGroupsController. 我希望它的路由而不是/package-groups默认路由/PackageGroups,并且我不想为每个控制器指定硬编码路由。我怎样才能使用全局配置或其他东西来实现这一点?

Gur*_*ron 5

AddControllers允许您自定义使用的约定,您可以尝试使用那些与RouteTokenTransformerConvention. 就像是:

builder.Services.AddControllers(opts => 
    opts.Conventions.Add(new RouteTokenTransformerConvention(new ToKebabParameterTransformer())));

public class ToKebabParameterTransformer : IOutboundParameterTransformer
{
    public string TransformOutbound(object? value) => value != null 
        ? Regex.Replace(value.ToString(), "([a-z])([A-Z])", "$1-$2").ToLower() // to kebab 
        : null; 
}
Run Code Online (Sandbox Code Playgroud)