【问题标题】:Add parameters to query string in Swashbuckle paths向 Swashbuckle 路径中的查询字符串添加参数
【发布时间】:2020-03-16 15:22:33
【问题描述】:

我有这个控制器有 2 个动作,两个 GET,同名。

[ApiVersion("2")]
[Route("v{version:apiVersion}/[controller]")]
public class FooController : BaseController

而这两个动作是这样的:

public IActionResult Get([FromServices]IBarService barService)  
public IActionResult Get([FromServices]IBarService barService, string someParameter)

但我确实需要输入甚至输出将这两个操作区分为不同的操作我也无法更改当前 API 的行为,这意味着最终用户应该可以访问以下列出的路径:

GET v2/Foo
GET v2/Foo?someParameter={someParameter}

首先我必须添加这一行以使其工作:

o.ResolveConflictingActions((apiDescriptions) => apiDescriptions.First());

它可以工作,但是当列出 OpenApiOperation 时,它只有第一个(原因很明显)

如何添加查询字符串参数以使它们像 2 个不同的路径一样工作?

【问题讨论】:

    标签: api asp.net-core .net-core swagger swashbuckle


    【解决方案1】:

    这里有一个替代方案:

    [RoutePrefix("foo/widgets")]
    public class RoutePrefixController : ApiController
    {
        [Route("")]
        public string Get()
        {
            return "value";
        }
    
        [Route("{id}")]
        public string GetById(string id)
        {
            return "value " + id;
        }
    
        [Route("{id}/{name}")]
        public string GetByIdByName(string id, string name)
        {
            return "value " + id + " " + name;
        }
    

    使用 RoutePrefixRoute 你的最终端点是:

    • GET ​/foo​/widgets
    • GET ​/foo​/widgets​/{id}
    • GET ​/foo​/widgets​/{id}​/{name}

    这是 swagger 上的样子:
    http://swagger-net-test.azurewebsites.net/swagger/ui/index?filter=RoutePrefix

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-12-10
      • 1970-01-01
      • 2017-01-26
      • 1970-01-01
      • 1970-01-01
      • 2016-04-16
      • 1970-01-01
      相关资源
      最近更新 更多