首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NSwag过滤器命名空间

NSwag过滤器命名空间
EN

Stack Overflow用户
提问于 2018-09-14 18:17:04
回答 1查看 1.8K关注 0票数 1

我使用NSwag在ASP.Net Core2.1项目中生成swagger文档,该项目包含Web控制器、MVC控制器和Razor页面。NSwag抱怨了很多类似的事情,虽然它们在ASP.NET中是有效的。问题:如何在Swagger/NSwag中文件化,只包含一个特定的名称空间(MyProject.Api)或路径(/api/)?

path '/api/XXX/Create‘上的“Post”方法多次注册

代码语言:javascript
复制
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);
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-02-21 10:10:25

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

您也可以将它放在整个控制器类上。

对于整个项目的批量操作,可以使用IOperationProcessor,如下所示

代码语言:javascript
复制
    public class IncludeControllersInSwagger : IOperationProcessor
    {
        public Task<bool> ProcessAsync(OperationProcessorContext context)
        {
            bool controllerIsIncluded = TakeADecisionBasedOn(context.ControllerType);
            return Task.FromResult(controllerIsIncluded);
        }
    }

然后在启动时用

代码语言:javascript
复制
            RouteTable.Routes.MapOwinPath("swagger", app =>
            {
                app.UseSwagger(typeof(WebApiApplication).Assembly, settings =>
                {
                    // the usual config, then:
                    settings.GeneratorSettings.OperationProcessors.Insert(0,
                      new IncludeControllersInSwagger());
                });
            });

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

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52337355

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档