Swagger не может найти контроллеры, загруженные из сборки в проекте ASP NET CORE - PullRequest
0 голосов
/ 26 сентября 2018

У меня есть консольный проект ядра asp .net, который загружает сборку API с помощью ApplicationPart.Мне нужно добавить swagger для предоставления доступа к API, но когда я установил Swashbuckle в консольный проект и настроил Swagger в классе запуска, я ничего не смогу найти, если перейти к интерфейсу swagger.Возвращает ошибку 401.

В методе ConfigureServices:

services.AddMvc
.AddApplicationPart(WebApi.GetAssembly()).AddControllersAsServices();
services.AddSwaggerGen(c =>
{
c.SwaggerDoc("v1", new Info { Title = "My API", Version = "v1"});
});

В методе Configure:

app.UseSwagger();
app.UseSwaggerUI(c =>
{
c.SwaggerEndpoint("/swagger/v1/swagger.json", "My API V1");
});

Я могу вызывать действия на контроллере просто отлично, но похожеSwashbuckle не сгенерировал никакого Swagger для этого.Я что-то пропустил или пока не поддерживается?Любое предложение будет оценено!

Ответы [ 2 ]

0 голосов
/ 26 сентября 2018

Хотя я не использую Swagger, в моем контексте у меня была похожая проблема, поэтому я проверяю загрузку контроллеров вручную:

    public void ConfigureServices(IServiceCollection Services)
    {
        // find all controllers
        var Controllers =
            from a in AppDomain.CurrentDomain.GetAssemblies().AsParallel()
            from t in a.GetTypes()
            let attributes = t.GetCustomAttributes(typeof(ControllerAttribute), true)
            where attributes?.Length > 0
            select new { Type = t };

        var ControllersList = Controllers.ToList();
        Logging.Info($"Found {ControllersList.Count} controllers");

        // register them
        foreach (var Controller in ControllersList)
        {
            Logging.Info($"[Controller] Registering {Controller.Type.Name}");
            Services
                .AddMvc()
                .AddJsonOptions(Options => Options.SerializerSettings.ContractResolver = new DefaultContractResolver())
                .AddApplicationPart(Controller.Type.Assembly);
        }

При этом в init, контроллеры добавляются и инициализируются должным образом

0 голосов
/ 26 сентября 2018

Я использую Nswag для всех своих проектов.У меня нет большого опыта работы с Swashbuckle, но они оба служат схожей цели.Я предоставляю способ настроить Nswag.

Добавьте пакет nuget NSwag.AspNetCore в свой проект, а в классе запуска добавьте следующий код:

app.UseSwaggerUi(typeof(Startup).GetTypeInfo().Assembly, settings =>
{
    settings.GeneratorSettings.DefaultPropertyNameHandling = PropertyNameHandling.CamelCase;

    settings.PostProcess = document =>
    {
        document.Info.Version = "v1";
        document.Info.Title = "RestAPI";
    };
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...