使用 Swagger 的 Web API MVC5 不会通过“试试看!”调用 API带标题

Posted

技术标签:

【中文标题】使用 Swagger 的 Web API MVC5 不会通过“试试看!”调用 API带标题【英文标题】:Web API MVC5 using Swagger not going to call API with "Try it out!" with Headers 【发布时间】:2020-08-04 15:04:39 【问题描述】: 我在我的 Web API MVC5 中配置了 Swagger UI。对于测试 API,在我添加一些标头参数之前,swagger 可以正常工作。 API 的创建方式是,用户名和密码字段位于标头中,所有其他数据位于正文中。 标题由IOperationFilter 添加,如Web Api How to add a Header parameter for all API in Swagger 中所建议的那样 并且OperationFilterSwaggerConfig.cs 中添加为:c.OperationFilter<AddHeaderParameters>();
public class AddHeaderParameters : IOperationFilter

    public void Apply(Operation operation, SchemaRegistry schemaRegistry, ApiDescription apiDescription)
    
        if (operation.parameters == null)
            operation.parameters = new List<Parameter>();

        operation.parameters.Add(new Parameter
        
            name = "Account Username",
            @in = "header",
            type = "string",
            required = true,
        );
        operation.parameters.Add(new Parameter
        
            name = "Account Password",
            @in = "header",
            type = "string",
            required = true,
        );
    

带有标题的 Swagger UI

需要帮助我遗漏了什么或不正确的事情。

【问题讨论】:

【参考方案1】:

我得到了问题中上述问题的解决方案。在这里分享可能对其他人有帮助。

当我创建类 AddHeaderParameters 以在 swagger UI 中获取标题时,我已经自定义了标题名称(这是问题的实际原因)。标题名称应该与实际标题名称匹配。

就我而言,例如标题名称是AccountUserName,我在大摇大摆的标题中使用它,并给出空间为Account Username

正确的方法

operation.parameters.Add(new Parameter

    name = "AccountUserName",
    @in = "header",
    type = "string",
    required = true,
);

【讨论】:

是的,我使用了 swagger,但没有返回包含多个字母的标题,因此它信息丰富且有益。

以上是关于使用 Swagger 的 Web API MVC5 不会通过“试试看!”调用 API带标题的主要内容,如果未能解决你的问题,请参考以下文章

Web Api 2.0中使用Swagger生成Api文档的2个小Tips

基于.net EF6 MVC5+WEB Api 的Web系统框架总结-Excel文件读写操作

ASP.NET Core Web API中使用Swagger

Swagger UI教程 API 文档神器 搭配Node使用 web api 接口文档 mvc接口文档

ASP.NET Core Web API使用静态swagger.json文件

想说爱你不容易 | 使用最小 WEB API 实现文件上传(Swagger 支持)