昂首阔步找不到从ASP NET CORE项目中的程序集加载的控制器

时间:2018-09-25 21:09:19

标签: asp.net-core swagger

我有一个.net核心控制台项目,该项目正在通过使用ApplicationPart加载API程序集。我需要添加swagger来公开API,但是当我将Swashbuckle安装到控制台项目并在启动类中配置Swagger时,如果导航到swagger ui则找不到任何内容。返回401错误。

在ConfigureServices方法中:

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

在配置方法中:

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

我可以在控制器上调用动作,但是似乎Swashbuckle尚未为其生成任何Swagger。我错过了任何东西还是尚不支持?任何建议将不胜感激!

2 个答案:

答案 0 :(得分:1)

在不使用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);
        }

通过初始化,可以正确添加和初始化控制器

答案 1 :(得分:0)

我在所有项目中都使用Nswag。我对Swashbuckle并没有太多的经验,但他们的目的相似。我提供了一种配置Nswag的方法。

将NSwag.AspNetCore nuget包添加到您的项目中,并在启动类中添加以下代码:

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

    settings.PostProcess = document =>
    {
        document.Info.Version = "v1";
        document.Info.Title = "RestAPI";
    };
});