You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C# Swagger UI 全局路由参数配置:能否统一注入userId参数?

在Swagger中配置全局通用路由参数自动注入

当然可以实现,针对你提到的~/user/{userId:guid}/...这类共享路由参数的场景,有两种实用方案:

方案一:后端通过Swashbuckle OperationFilter标记全局参数

如果用的是ASP.NET Core的Swashbuckle,可以自定义IOperationFilter来自动识别包含{userId:guid}的路由,给对应的接口参数添加全局配置标记,让Swagger UI识别为可全局设置的参数。

  1. 自定义OperationFilter:
public class GlobalRouteParameterFilter : IOperationFilter
{
    public void Apply(OpenApiOperation operation, OperationFilterContext context)
    {
        var routeTemplate = context.ApiDescription.ActionDescriptor.AttributeRouteInfo?.Template;
        // 检查路由模板是否包含目标参数
        if (routeTemplate?.Contains("{userId:guid}") == true)
        {
            var userIdParam = operation.Parameters.FirstOrDefault(p => p.Name == "userId" && p.In == ParameterLocation.Path);
            if (userIdParam != null)
            {
                // 添加扩展标记,让Swagger UI识别为全局参数
                userIdParam.Extensions.Add("x-ms-parameter-location", new OpenApiString("global"));
                userIdParam.Description = "全局用户ID,设置后自动填充到所有含该参数的路由";
            }
        }
    }
}
  1. 注册这个Filter到Swagger服务:
builder.Services.AddSwaggerGen(c =>
{
    c.SwaggerDoc("v1", new OpenApiInfo { Title = "My API", Version = "v1" });
    // 添加自定义Filter
    c.OperationFilter<GlobalRouteParameterFilter>();
});

方案二:前端脚本实现全局输入自动填充

如果需要更灵活的UI控制,可以给Swagger UI注入自定义JavaScript,添加一个全局输入框,输入userId后自动填充所有对应路由的参数输入框。

  1. 配置Swagger UI注入脚本:
app.UseSwaggerUI(c =>
{
    c.SwaggerEndpoint("/swagger/v1/swagger.json", "My API V1");
    // 注入自定义脚本(确保脚本文件在wwwroot/swagger-ui目录下)
    c.InjectJavascript("/swagger-ui/custom-script.js");
});
  1. 编写custom-script.js:
window.onload = () => {
    // 在Swagger顶部导航栏添加全局输入框
    const topBar = document.querySelector('.swagger-ui .topbar-wrapper');
    const userIdInput = document.createElement('input');
    userIdInput.type = 'text';
    userIdInput.placeholder = '全局用户ID(GUID)';
    userIdInput.style.marginLeft = '10px';
    userIdInput.style.padding = '4px 8px';
    userIdInput.style.borderRadius = '4px';
    userIdInput.style.border = '1px solid #ccc';

    // 输入内容时自动填充所有userId参数输入框
    userIdInput.addEventListener('input', (e) => {
        const value = e.target.value.trim();
        document.querySelectorAll('.parameter__input[name="userId"]').forEach(input => {
            input.value = value;
            // 触发输入事件,让Swagger UI更新请求URL
            input.dispatchEvent(new Event('input'));
        });
    });

    topBar.appendChild(userIdInput);
};

两种方案可以结合使用:后端Filter标记参数用途,前端脚本实现自动填充,彻底避免重复输入。

内容的提问来源于stack exchange,提问作者Heinrich

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 15:55:04