【问题标题】:Swagger Ui(SwashBuckle for Core) is not throwing UI level Error Message for Mandatory HeadersSwagger Ui(SwashBuckle for Core)没有为强制标头抛出 UI 级别错误消息
【发布时间】:2020-12-22 08:13:41
【问题描述】:

我目前正在使用 Swagger Ui 开发 WebApi。我面临一个奇怪的问题。当用户尝试调用 API 时,我将一些标题字段设置为强制(*必需)字段。

如果用户错过传递任何标题,它应该显示 Image-1 中给出的警告。(在 image-1 中,红色标记的字段是查询参数),它工作正常,但不适用于 Header。

对于标题,我遇到了如图 2 所示的问题。错误假设出现在 UI 上,但它出现在浏览器控制台窗口中。

IOOperationFilter中的代码如下

public void Apply(OpenApiOperation operation, OperationFilterContext context)
        {
            if (operation.Parameters == null)
                operation.Parameters = new List<OpenApiParameter>();

            operation.Parameters.Add(new OpenApiParameter
            {
                Name = "X-Transaction-Id",
                In = ParameterLocation.Header,
                Required = true,
                AllowEmptyValue=false,
                Description="Transaction Id to track the issue"
            });
       }

注意:- 我使用IOperationFilter 设置所需的标头。使用Swashbuckle.AspNetCore(5.6.3)。对此的任何帮助都会非常棒!

【问题讨论】:

  • 您的标头参数似乎缺少type(数据类型)。请发布您的IOperationFilter 代码。
  • 在问题中添加。对于我以相同方式添加的所有标题。

标签: c# asp.net-core swagger swagger-ui swashbuckle.aspnetcore


【解决方案1】:

头参数必须指定Schema(数据类型),如:

            operation.Parameters.Add(new OpenApiParameter
            {
                Name = "X-Transaction-Id",
                ...

                Schema = new OpenApiSchema   // <-----------------
                {
                    Type = "string"
                }
            });

【讨论】:

  • 谢谢海伦,它成功了,我会接受这个作为答案。如果我们可以设置任何其他参数以获得更好的用户体验?
  • 确保参数描述的描述性足够。如果需要,您还可以添加架构属性以缩小可能的值。对于字符串,您可以指定最小/最大长度、format(例如 "uuid")和/或正则表达式模式。对于数字,您可以提供最小值/最大值。
猜你喜欢
  • 2022-12-07
  • 1970-01-01
  • 2018-02-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多