【问题标题】:NSwag filter namespaceNSwag 过滤器命名空间
【发布时间】:2019-02-19 14:01:58
【问题描述】:

我正在使用 NSwag 在 ASP.Net Core 2.1 项目中生成 swagger api 文档,该项目混合了 Web-API 控制器、MVC 控制器和 Razor 页面。 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);
}

【问题讨论】:

    标签: swagger nswag


    【解决方案1】:

    如果您只想排除一种操作方法,请将属性[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 中编写代码以仅包含某些控制器,或排除命名空间等。

    【讨论】:

    • 小提示:您应该在集合的 0/开始处插入处理器,这样就不会生成未使用的模式,请参阅 nswag wiki
    猜你喜欢
    • 1970-01-01
    • 2017-12-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-17
    • 1970-01-01
    • 1970-01-01
    • 2014-09-06
    相关资源
    最近更新 更多