相关疑难解决方法(0)

找不到Swashbuckle.AspNetCore SwaggerOperation属性

我正在尝试使用Swashbuckle.AspNetCore(3.0.0)帮助创建的Autorest和Swagger文档来生成REST API客户端.

生成的swagger文档似乎是正确的,除了操作名称不是很好.

"/api/Addresses/{id}": {
      "get": {
        "tags": [ "Address" ],
        "operationId": "ApiAddressesByIdGet",
        "consumes": [],
        "produces": [],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "type": "string",
            "format": "uuid"
          }
        ],
        "responses": { "200": { "description": "Success" } }
      },
Run Code Online (Sandbox Code Playgroud)

我在许多文章和SwashBuckle.AspNetCore的官方文档中看到我可以使用属性来装饰我的控制器方法,如下所示:

 [HttpGet]
 [Produces("application/json")]
 [ProducesResponseType((int)HttpStatusCode.NotFound)]
 [ProducesResponseType(typeof(List<AddressDto>), (int)HttpStatusCode.OK)]
 [SwaggerOperation("GetAllAdresses")]
 public async Task<IActionResult> GetAllAsync()
 {
   ....
 }
Run Code Online (Sandbox Code Playgroud)

不幸的是,我收到了一个错误:无法找到SwaggerOperationAttribute!

我验证了安装的nuget包,它们是:

  • SwashBuckle.AspNetCore.Swagger(3.0.0)
  • SwashBuckle.AspNetCore.SwaggerGen(3.0.0)
  • SwashBuckle.AspNetCore.SwaggerUI(3.0.0)

有人可以帮帮我吗?请

swashbuckle asp.net-core

16
推荐指数
1
解决办法
7082
查看次数

ASP.NET Core 6.0 最小 API / Swagger 标签

有什么方法可以更改使用最少 api 编写的给定方法的标签吗http

builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen();

...

app.MapGet("/todo", () => "Hello world");
Run Code Online (Sandbox Code Playgroud)

这样我就可以在文档中对方法进行逻辑分组,类似于它们在控制器中时的方法。

已编辑

我尝试过(来自@Modar Na的提示)SwaggerOperation,不幸的是它没有帮助。

app.MapGet("/todo", [SwaggerOperation(Tags = new[] { "ToDo" })]() => "Hello world");
app.MapPost("/todo", [SwaggerOperation(Tags = new[] { "ToDo" })]() => "Hello world");

app.MapGet("/projects", [SwaggerOperation(Tags = new[] { "Projects" })]() => "Hello world");
app.MapPost("/projects", [SwaggerOperation(Tags = new[] { "Projects" })]() => "Hello world");
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

更新

作为解决方法,我TagActionsBy在配置 swagger 生成器时使用了该方法。

builder.Services.AddSwaggerGen(c =>
{
    c.TagActionsBy(d =>
    {
        return new List<string>() { d.ActionDescriptor.DisplayName! };
    });
});
Run Code Online (Sandbox Code Playgroud)

请参阅我的 …

swagger asp.net-core swashbuckle.aspnetcore

6
推荐指数
1
解决办法
7675
查看次数

列出多个组下的API方法

我有Swashbuckle带注释的代码,如下所示:

[Route("api/Subscribers/{id}/[controller]")]
[Route("api/Organizations/{id}/[controller]")]
public class AddressesController : Controller
{
    [HttpGet("{aid}")]
    [SwaggerResponse(HttpStatusCode.OK, Type = typeof(PostalRecord))]
    public async Task<IActionResult> GetAddress(Guid id, Guid aid)
    {
       //do something
    }
Run Code Online (Sandbox Code Playgroud)

我想使用GroupActionsBy自定义,如本例所示,但我希望将上述GetAddress方法同时包含在两个独立的组中,这些组对应于显示的两个路由前缀:

[Route("api/Subscribers/{id}/[controller]")]
[Route("api/Organizations/{id}/[controller]")]
Run Code Online (Sandbox Code Playgroud)

换句话说,我希望在两者下列出相同的方法:

  • 认购
  • 组织

如何才能做到这一点?

顺便说一句,我正在使用ASP.NET Core(dnx46).如果还不能使用Swashbucklee的ASP.NET核心版本执行此操作,那么仍然可以欣赏完整的CLR(Web API 2.2?)示例.

另外,关于我正在尝试做的更完整的故事 - 我有一个单独的SO帖子.

更新

@venerik给出的答案让我接近解决方案.当我申请他的示例代码时......

[SwaggerOperation(Tags = new []{"Subscribers", "Organizations"})]
Run Code Online (Sandbox Code Playgroud)

...这导致Swagger列表看起来像这样:

在此输入图像描述

简而言之,"地址"端点现在出现在我想要的标题下,但正如红色箭头所示,它们现在也被"交叉列出"; 我不希望"订户"端点列在"组织"端点下.

我怀疑[SwaggerOperationFilter]可能是答案的"另一半",如果我可以删除交叉列表的条目.我之前没有玩过这种机制.

另外,非常不幸的是[SwaggerOperation]只能应用于方法/动作.我宁愿把它应用到类本身:

[Route("api/Subscribers/{id}/[controller]")]
[Route("api/Organizations/{id}/[controller]")]
[SwaggerOperation(Tags = new []{"Subscribers", "Organizations"})]
public class AddressesController : Controller
{
Run Code Online (Sandbox Code Playgroud)

这有什么补救措施吗?

c# asp.net-web-api swagger swashbuckle asp.net-core

2
推荐指数
2
解决办法
6142
查看次数