Пространство имен фильтра NSwag - PullRequest
0 голосов
/ 14 сентября 2018

Я использую NSwag для создания API-документов swagger в проекте ASP.Net Core 2.1, в котором смешаны контроллер Web-API, контроллер MVC и Razor Pages. NSwag много жалуется на подобное, хотя они действительны в ASP.NET. Вопрос: как подать в Swagger / NSwag файл, чтобы включить только определенное пространство имен (MyProject.Api) или путь (/ api /)?

Метод 'Post' on path '/ api / XXX / Create' регистрируется несколько раз

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

1 Ответ

0 голосов
/ 21 февраля 2019

Если вы хотите исключить только один метод действия, поместите в него атрибут [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 длявключать только определенные контроллеры или исключать пространство имен и т. д.

...