将查询字符串参数添加到我的Swagger规范中 [英] Adding Query String Params to my Swagger Specs

查看:83
本文介绍了将查询字符串参数添加到我的Swagger规范中的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在我的Web API中使用Swashbuckle(C#中的wagger).我有几个返回列表的GET端点,并且允许用户向QueryString中添加一个perpage和page参数

I am using Swashbuckle (swagger for C#) with my Web API. I have several GET End-Points that return lists and I allow the user to add a perpage and page params into the QueryString

示例: http://myapi.com/endpoint/?page=5&perpage = 10

我看到swagger支持'query'中的参数,但是如何让Swashbuckle做到这一点?

I see that swagger does support parameter in 'query' but how do I get Swashbuckle to do it?

我在其中一项评论中提到,我通过创建自定义属性来允许我做所需的事情来解决了我的问题.下面是我的解决方案的代码:

I mention in one of the comments that I solved my issue by creating a custom attribute to allow me to do what I needed. Below is the code for my solution:

[AttributeUsage(AttributeTargets.Method, Inherited = false, AllowMultiple = true)]
public class SwaggerParameterAttribute : Attribute
{
    public SwaggerParameterAttribute(string name, string description)
    {
        Name = name;
        Description = description;
    }

    public string Name { get; private set; }
    public Type DataType { get; set; }
    public string ParameterType { get; set; }
    public string Description { get; private set; }
    public bool Required { get; set; } = false;
}

使用Swagger配置注册属性:

Register the Attribute with the Swagger Config:

GlobalConfiguration.Configuration 
    .EnableSwagger(c =>
        {
            c.OperationFilter<SwaggerParametersAttributeHandler>();
        });

然后将此属性添加到您的方法中:

Then add this attribute to your methods:

[SwaggerParameter("page", "Page number to display", DataType = typeof(Int32), ParameterType = ParameterType.inQuery)]
[SwaggerParameter("perpage","Items to display per page", DataType = typeof(Int32), ParameterType = ParameterType.inQuery)]

推荐答案

您可以轻松实现.假设您有一个 ItemsController ,其操作如下:

You can achieve that quite easily. Suppose you have an ItemsController with an action like this:

[Route("/api/items/{id}")]
public IHttpActionResult Get(int id, int? page = null, int? perpage = null)
{
   // some relevant code
   return Ok();
}

Swashbuckle将生成此规范(仅显示相关部分):

Swashbuckle will generate this specification (only showing relevant part):

"paths":{  
  "/api/items/{id}":{  
     "get":{  
        "parameters":[  
           {  
              "name":"id",
              "in":"path",
              "required":true,
              "type":"integer",
              "format":"int32"
           },
           {  
              "name":"page",
              "in":"query",
              "required":false,
              "type":"integer",
              "format":"int32"
           },
           {  
              "name":"limit",
              "in":"query",
              "required":false,
              "type":"integer",
              "format":"int32"
           }
        ]
     }
  }

当需要 page perpage 时,只需将参数设为不可为空.

When you want page and perpage to be required, just make the parameters not nullable.

这篇关于将查询字符串参数添加到我的Swagger规范中的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆