Web Api如何在Swagger中为所有API添加Header参数

问题描述 投票:11回答:4

我搜索了可能的方法来添加一个请求标头参数,该参数将自动添加到我的web-api中的每个方法,但我找不到一个明确的方法。

在搜索时我发现OperationFilter()方法必须对此做些什么。

c# asp.net-web-api swagger swagger-ui
4个回答
26
投票

是的,你可以通过继承IOperationFilter来做到这一点

你可以在这里找到关于GitHub的答案:AddRequiredHeaderParameter

using System.Collections.Generic;
using Microsoft.AspNetCore.Mvc.ApiExplorer;
using Swashbuckle.AspNetCore.Swagger;
using Swashbuckle.AspNetCore.SwaggerGen;

public class AddRequiredHeaderParameter : IOperationFilter
{
    public void Apply(Operation operation, OperationFilterContext context)
    {
        if (operation.Parameters == null)
            operation.Parameters = new List<IParameter>();

        operation.Parameters.Add(new NonBodyParameter
            {
                Name = "X-User-Token",
                In = "header",
                Type = "string",
                Required = false
            });
    }
}

然后你去你的SwaggerConfig.cs文件并在AddSwaggerGen部分添加以下内容:

c.OperationFilter<AddRequiredHeaderParameter>();

重建,享受。


5
投票

添加自定义标头的另一种方法是在控制器操作中添加参数。 以下示例将x-test参数添加到UI:

[HttpPost]
public IActionResult Test([FromHeader(Name="x-test")][Required] string requiredHeader)
{
    return Ok();
}

enter image description here


3
投票

我不得不这样做略有不同,不知道为什么。这是我添加标头值所做的:

这被添加到我的swagger配置中:

    c.OperationFilter<AddRequiredHeaderParameter>();

这是班级:

    public class AddRequiredHeaderParameter : IOperationFilter
    {
        public void Apply(Operation operation, OperationFilterContext context)
        {
            operation.Parameters.Add(new NonBodyParameter
            {
                Name = "X-MYHEADER",
                In = "header",
                Type = "string",
                Required = false
            });
        }
    }

0
投票

您也可以使用基本模型类,并使用属性[FromHeader]来获取应在自定义标头中发送的属性。像这样的东西:

public class AuthenticatedRequest
{
    [FromHeader(Name = "User-Identity")]
    public string UserIdentity { get; set; }
}

至少它适用于ASP.NET Core 2.1和Swashbuckle.AspNetCore 2.5.0。

© www.soinside.com 2019 - 2024. All rights reserved.