swagger.json 路径和定义为空。规范中未定义任何操作
swagger.json paths and definitions are empty. No operations defined in spec
我正在开发 .netcore 网络应用程序。我正在使用招摇,我已经做了所有必要的调整。不幸的是,它不起作用,我只在 swagger 输出页面中看到 No operations defined in spec!
。
带/swagger/v1/swagger.json
的swagger文件内容如下:
{
"swagger": "2.0",
"info": {
"version": "v1",
"title": "Something"
},
"paths": {},
"definitions": {}
}
我想在 swagger 输出页面中查看我的控制器及其操作。
您需要在 project obtions => Build
选项卡下启用 XML Documentation file
。
然后你需要通过swagger读取这个文件,这样swagger才能从中创建文档。
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};
}
}
在配置服务中
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)));
....
});
经过一些研究,我发现我的问题是关于在 .NetCore2.1 中使用 swagger 和 OData。
我找到了解决这个问题的方法。
首先我添加了以下两个 Nuget 包:
Swashbuckle.AspNetCore
Swashbuckle.AspNetCore.Annotations
然后,我在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);
我在控制器中添加了以下代码行:
[ApiExplorerSettings(IgnoreApi = false)]
请注意,它对我有用,但可能需要更多研究以了解最终的副作用
请在控制器中添加任何方法,例如然后显示 swagger 方法
[HttpGet]
[EnableQuery]
public IQueryable<int> Get()
{
return 1;
}
听起来您需要在控制器中添加一些路由。对于休息服务,您需要将它们与 Visual Studio 自动构建的内容分开添加。例如
// 获取:项目
[HTTPGet]
[路线(“/项目”)]
...其余功能...
这会让你的 swagger 知道当你点击按钮时它做了什么。
我正在开发 .netcore 网络应用程序。我正在使用招摇,我已经做了所有必要的调整。不幸的是,它不起作用,我只在 swagger 输出页面中看到 No operations defined in spec!
。
带/swagger/v1/swagger.json
的swagger文件内容如下:
{
"swagger": "2.0",
"info": {
"version": "v1",
"title": "Something"
},
"paths": {},
"definitions": {}
}
我想在 swagger 输出页面中查看我的控制器及其操作。
您需要在 project obtions => Build
选项卡下启用 XML Documentation file
。
然后你需要通过swagger读取这个文件,这样swagger才能从中创建文档。
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};
}
}
在配置服务中
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)));
....
});
经过一些研究,我发现我的问题是关于在 .NetCore2.1 中使用 swagger 和 OData。 我找到了解决这个问题的方法。
首先我添加了以下两个 Nuget 包:
Swashbuckle.AspNetCore
Swashbuckle.AspNetCore.Annotations
然后,我在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);
我在控制器中添加了以下代码行:
[ApiExplorerSettings(IgnoreApi = false)]
请注意,它对我有用,但可能需要更多研究以了解最终的副作用
请在控制器中添加任何方法,例如然后显示 swagger 方法
[HttpGet]
[EnableQuery]
public IQueryable<int> Get()
{
return 1;
}
听起来您需要在控制器中添加一些路由。对于休息服务,您需要将它们与 Visual Studio 自动构建的内容分开添加。例如 // 获取:项目 [HTTPGet] [路线(“/项目”)] ...其余功能... 这会让你的 swagger 知道当你点击按钮时它做了什么。