NSwag 过滤器命名空间

NSwag filter namespace

我正在使用 NSwag 在 ASP.Net Core 2.1 项目中生成 swagger api 文档,该项目混合了 Web-API 控制器、MVC 控制器和 Razor Pages。 NSwag 抱怨很多类似以下内容,而它们在 ASP.NET 中有效。问题:如何在 Swagger/NSwag 文件管理器中仅包含特定的命名空间 (MyProject.Api) 或路径 (/api/)?

The method 'Post' on path '/api/XXX/Create' is registered multiple times

public ActionResult Create()
{
    var doctor = new Doctor();
    doctor.create_dt = DateTime.Now;
    return View(doctor);
}

//
[HttpPost]
public ActionResult Create(Doctor doctor)
{
    if (ModelState.IsValid)
    {
        theDB.Doctor.Add(doctor);
        theDB.SaveChanges();
        return RedirectToAction("Index");
    }
    return View(doctor);
}

如果您只想排除一种操作方法,请将属性 [ApiExplorerSettings(IgnoreApi = true)] 放在上面。

你也可以把它放在整个控制器上 class。

对于整个项目的批量操作,您可以使用 IOperationProcessor,像这样

    public class IncludeControllersInSwagger : IOperationProcessor
    {
        public Task<bool> ProcessAsync(OperationProcessorContext context)
        {
            bool controllerIsIncluded = TakeADecisionBasedOn(context.ControllerType);
            return Task.FromResult(controllerIsIncluded);
        }
    }

然后在启动时用

连接它
            RouteTable.Routes.MapOwinPath("swagger", app =>
            {
                app.UseSwagger(typeof(WebApiApplication).Assembly, settings =>
                {
                    // the usual config, then:
                    settings.GeneratorSettings.OperationProcessors.Insert(0,
                      new IncludeControllersInSwagger());
                });
            });

您可以在 TakeADecisionBasedOn 中编写代码以仅包含某些控制器,或排除命名空间等