问题
I am developing a .netcore web application. I am using of swagger and I've made all the necessary adjustments. Unfortunately it does not work and I just see No operations defined in spec!
in the swagger output page.
The swagger file with /swagger/v1/swagger.json
has the following content:
{
"swagger": "2.0",
"info": {
"version": "v1",
"title": "Something"
},
"paths": {},
"definitions": {}
}
I want to see my controllers and their actions in swagger output page.
回答1:
after some research i was found that my problem was about using swagger along with OData in .NetCore2.1. i found a solution for this problem.
first i added two following Nuget packages:
Swashbuckle.AspNetCore
Swashbuckle.AspNetCore.Annotations
then, i added following codes in Startup.cs
services.AddMvc(options => {
foreach (var outputFormatter in
options.OutputFormatters.OfType<ODataOutputFormatter>().Where(_ =>
_.SupportedMediaTypes.Count == 0))
{
outputFormatter.SupportedMediaTypes.Add(new
MediaTypeHeaderValue("application/prs.odatatestxx-odata"));
}
foreach (var inputFormatter in
options.InputFormatters.OfType<ODataInputFormatter>().Where(_ =>
_.SupportedMediaTypes.Count == 0))
{
inputFormatter.SupportedMediaTypes.Add(new
MediaTypeHeaderValue("application/prs.odatatestxx-odata"));
}
}).SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
the, i added following code line in controllers:
[ApiExplorerSettings(IgnoreApi = false)]
please note that it was worked for me but it may be need more research for eventually side effects
回答2:
you need to enable XML Documentation file
under project obtions => Build
tab.
Then you need to read this file through swagger so that swagger can create documentation from it.
private static string[] XmlCommentsFilePath
{
get
{
var basePath = PlatformServices.Default.Application.ApplicationBasePath;
var apiDocFile = typeof(Startup).GetTypeInfo().Assembly.GetName().Name + ".xml";
var apiPath = Path.Combine(basePath, apiDocFile);
return new[] {apiPath};
}
}
In ConfigureServices
services.AddSwaggerGen(options =>
{
var provider = services.BuildServiceProvider().GetRequiredService<IApiVersionDescriptionProvider>();
// add a swagger document for each discovered API version
provider.ApiVersionDescriptions.ForEach(x => options.SwaggerDoc(x.GroupName, CreateInfoForApiVersion(x)));
....
});
来源:https://stackoverflow.com/questions/54159987/swagger-json-paths-and-definitions-are-empty-no-operations-defined-in-spec