我有一个.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。我错过了任何东西还是尚不支持?任何建议将不胜感激!
答案 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";
};
});