1

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

路径 '/api/XXX/Create' 上的方法 'Post' 已注册多次

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);
}
4

1 回答 1

4

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

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

对于整个项目的批量操作,您可以使用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以仅包含某些控制器,或排除命名空间等。

于 2019-02-21T10:10:25.217 回答