Swagger 未加载 - 无法加载 API 定义:获取错误未定义
Swagger not loading - Failed to load API definition: Fetch error undefined
尝试结合托管在 IIS Express 上的 Web 应用程序来设置 swagger。 API 是使用 ASP Net Core 构建的。我已按照有关 Swashbuckle 和 ASP.NET Core 的相关 Microsoft 帮助页面上规定的说明进行操作。
到目前为止,我已经加载了 swagger 页面,并且可以看到我定义的 SwaggerDoc 正在加载,但是 API 不存在。当前出现以下错误:
"Fetch error undefined ./swagger/v1/swagger.json"
public class Startup
{
// This method gets called by the runtime. Use this method to add services to the container.
public void ConfigureServices(IServiceCollection services)
{
// services.AddDbContext<TodoContext>(opt =>
// opt.UseInMemoryDatabase("TodoList"));
services.AddMvc()
.SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
// Register the Swagger generator, defining 1 or more Swagger documents
services.AddSwaggerGen(c =>
{
c.SwaggerDoc("v1", new Info { Title = "API WSVAP (WebSmartView)", Version = "v1" });
});
}
// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
// Enable middleware to serve generated Swagger as a JSON endpoint.
app.UseSwagger();
// Enable middleware to serve swagger-ui (HTML, JS, CSS, etc.),
// specifying the Swagger JSON endpoint.
app.UseSwaggerUI(c =>
{
c.SwaggerEndpoint("./swagger/v1/swagger.json", "My API V1");
c.RoutePrefix = string.Empty;
});
app.UseMvc();
}
}
所以在进行了大量的故障排除之后,基本上可以归结为两件事,但我觉得总的来说这可能对将来的其他人有所帮助,所以我发布了一个答案。
首先 - 如果您遇到上述错误,实际查看发生了什么的最佳方法是将以下行添加到您的 Configure() 方法
app.UseDeveloperExceptionPage();
现在,如果您导航到 'swagger/v1/swagger.json' 页面,您应该会看到更多信息,这些信息将为您指明有用的方向。
其次-现在对我来说错误是
'Multiple operations with path 'some_path' and method 'GET' '
然而,这些 API 位于依赖库内部,因此我无法在定义点应用解决方案。作为一种解决方法,我发现将以下行添加到您的 ConfigureServices() 方法可以解决问题
services.AddSwaggerGen(c =>
{
c.SwaggerDoc("v1", new Info { Title = "API WSVAP (WebSmartView)", Version = "v1" });
c.ResolveConflictingActions(apiDescriptions => apiDescriptions.First()); //This line
});
最后 - 毕竟我能够生成 JSON 文件,但我仍然无法提取 UI。为了使这项工作正常进行,我不得不更改 Configure()
中的终点
app.UseSwaggerUI(c =>
{
c.SwaggerEndpoint("./v1/swagger.json", "My API V1"); //originally "./swagger/v1/swagger.json"
});
我不确定为什么这是必要的,尽管可能值得注意的是 Web 应用程序的虚拟目录托管在 IIS 上,这可能会产生影响。
注意:导航至 swagger/v1/swagger.json 将为您提供更多详细信息,对我来说,这是由于未修饰的操作引起的问题。 @MarkD
的评论中提到了此信息
希望这对以后的人有所帮助。
我有类似的问题,我在有问题的控制器方法上使用 Route
属性解决了它:
[HttpGet, Route("Throw")]
public ActionResult<string> Throw()
{
_logger.LogInformation("I think I am going to throw up");
throw new NotSupportedException("For testing unhandled exception logging.");
}
我觉得 ResolveConflictingActions
可能会掩盖真正的问题。
在我的例子中,控制器 class 和 URL 中有两个方法具有相同的注释。 (我们的团队使用 Entity Framework、ASP.NET 和 Swagger。)
[HttpGet("GetMyGreatData/{patientId}")]
[ValidatePatient]
public async Task<ActionResult<ServiceResponse<IEnumerable<MyGreatModel>>>> GetMyGreatData(
[FromRoute] int patientId, int offset = 0, int limit = 0)
{
//method details...
}
[HttpGet("GetMyGreatData/{patientId}")]
[ValidatePatient]
public async Task<ActionResult<ServiceResponse<IEnumerable<MyGreatModel>>>> GetMyGreatData(
[FromRoute] int patientId,
[FromQuery] DateTimeOffset? startdate = null,
[FromQuery] DateTimeOffset? endDate = null,
int offset = 0,
int limit = 0)
{
//method details...
}
删除一种方法解决了我的问题。
我有两个问题导致了同样的错误。
我在两个不同的命名空间下有两个同名的类。在生成 swagger 文档时,Swagger 无法协调这一点。为了修复它,我添加了行 options.CustomSchemaIds(x => x.FullName);
我有一个没有 [HttpGet] 注释的方法。 Swagger 需要显式定义 HTTP 端点。
我在 API 加载后通过检查 visual studio 中的输出发现了这两个问题。
我在这个问题上只花了两个小时,但我的原因完全不同,它与路由或注释无关。我有 2 个 class 同名(但命名空间不同):MyProject.Common.ClassName
和 MyProject.Api.ClassName
。 Swagger/swashbuckle 无法分辨两者之间的区别,所以我得到了那个无用的错误。
这 2 个小时用于 trial-and-error 评论控制器和端点,最终找到 3 个端点违规端点。所有 3 个端点都有不同的路由、不同(或没有)自定义授权和不同的方法名称。事实证明,所有 3 个端点要么接受一个参数,要么返回一个对象,其中包含我的 class 的 API 版本。没有使用通用版本。 Swagger 无法区分它们,吐了一身。
为什么哦,为什么 Swagger 或 Swashbuckle 不能提供实际的错误消息?本来可以节省我几个小时...
我一直在使用 .Net Core 3.1,我花了一些时间来找出并理解发生了什么。
问题可能由多种不同原因引起:
Swagger 配置错误
类 具有相同的名称但在不同的命名空间中
Public 没有 rest 属性的方法(Get、Post 等)
首先,请看下面的 link 以检查您的设置是否正确:
Add Swagger(OpenAPI) API Documentation in ASP.NET Core 3.1
然后,
找出问题的一个好方法是 运行 不使用 IISExpress 的应用程序并检查控制台日志。生成文档时发现的任何错误都将显示在那里。
在我的例子中,问题是我有一个没有任何 rest 属性的 public 方法(应该是私有的):
将方法从 public 更改为 private 后我解决了问题。
我通过打开网络选项卡并查看 swagger.json
的响应找到了错误
我以前遇到过同样的错误,在努力寻找原因后,我发现我的一个控制器中的一个 API 没有 HTTP 动词作为属性,所以我修复了它通过将 [HttpGet] 放在我的 API 上。
所以这是我的建议,检查你的 API 控制器,也许你忘记了和我一样的东西!
看看我的代码,我意识到我应该改变这个:
public async Task<Product> ProductDetail(int id)
{
return await _productQueries.GetProductDetail(id);
}
对此:
[Route("ProductDetail")]
[HttpPost]
public async Task<Product> ProductDetail(int id)
{
return await _productQueries.GetProductDetail(id);
}
我遇到了同样的问题,基本控制器没有用 Http 装饰,删除它后它就可以工作了。
只需导航到 https://localhost:{PortNo}/swagger/v1/swagger.json
并获取有关错误消息的更多详细信息。
将应用服务部署到 Azure 时可能会发生此错误。我已将应用服务重新部署到 Azure,错误消失了。
当这件事发生在我身上时,我追踪到 URL 带有下划线的路径参数,它与 asp 生成器
兼容
改变这个:
/block-content/{machine_name}:
对此
/block-content/{machineName}:
帮我解决了
我在 .NET 5.0 中也遇到了类似的问题,我通过以下方式解决了:
我在控制器上添加了这一行作为属性:
[Consumes("application/json")]
我只是忘记在添加 HTTP 属性后立即在我的控制器中添加 HTTP 属性,这对我来说就像一个魅力。
来源:https://www.benday.com/2020/12/16/webapi-core-swagger-failed-to-load-api-definition-error/
我遇到了同样的问题,所以我在浏览器上使用 inspect element 检查了它。 “控制台”选项卡显示问题源自的文件 (v1/swagger/json:1)。通过单击打开它显示我在控制器中使用的辅助方法之一是“Public”。将其更改为“私人”解决了我的问题。
这个页面也有很好的提示:
https://btrehberi.com/swagger-failed-to-load-api-definition-fetch-error-undefined-hatasi-cozumu/yazilim/
在我的案例中,Swagger 需要控制器中所有 public 成员的 [HttpAction]。不幸的是,我拼错了构造函数名称,因为它是 public,所以抛出了这个错误。
对于 ASP.NET Core 3.1,我必须确保动词没有歧义,我首先 运行 VS2019 中没有 IIS 的 API 项目发现了这一点(绿色箭头 > 左-单击胡萝卜图标和 select 项目名称,这会导致控制台 window 出现在启动时,以便您可以检查发生了什么并查看错误)。
[HttpGet("MyEndPointA")
这样Swagger就可以正确生成文档了。
<b>make sure the name "v1" matches the path in the swagger endpoint</b>
<p>
services.AddSwaggerGen(c =>
{
c.SwaggerDoc("v1", new OpenApiInfo {
Title = "ODAAPP",
Version = "v1" });
});
</p>
<br/>
app.UseSwaggerUI(c => c.SwaggerEndpoint("/swagger/v1/swagger.json",
"ODAAPP v1"));
enter code here
我一直在使用 .NET 5,我花了一些时间试图了解发生了什么。
我收到如下错误:
然后我通过以下方式解决了这个问题:
打开startup.cs文件
在Configure方法
中添加如下代码
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
app.UseSwagger(c =>
{
c.RouteTemplate = "/swagger/{documentName}/swagger.json";
});
app.UseSwaggerUI(c => c.SwaggerEndpoint("/swagger/v1/swagger.json", "API v1"));
}
并在 ConfigureServices 方法中
services.AddSwaggerGen(c =>
{
c.SwaggerDoc("v1", new OpenApiInfo { Title = "API", Version = "v1" });
c.ResolveConflictingActions(apiDescriptions => apiDescriptions.First());
});
感谢TheCodeBuzz for Resolved: Failed to load API definition (undefined /swagger/v1/swagger.json)
注意 RouteTemplate 字符串和 SwaggerEndpoint 字符串之间的区别。一个使用 {documentName},另一个使用“v1”作为文字。
如果您对多个操作方法使用相同的路由,也会发生这种情况(可以重载)
在我的例子中,项目被配置为在 startup.cs 使用 AddPolicy() 使用身份服务器 4 进行身份验证,并且有 [Authorize]
的用法
我删除了 startup.cs 的东西和 [Authorize]
的用法
会尽快更新
解决了 dotNet 6 中的问题!只需更改 [ApiController]
的属性顺序即可
肯定是Controller的某个方法出了问题。为了得到这个方法,有时你可能需要把你所有的控制器都拿出来,一个接一个地尝试插入,然后你会一起测试找到有错误的控制器。
例如。如果你喜欢 3Controllers 说
>Controller
>>>AuthController
>>>UserController
>>>HomeController
从控制器中取出两个,每次测试成功后,再添加一个控制器来测试控制器。有了它你就会知道控制器有错误的方法。
>Controller
>>>AuthController
如果 AuthenController 中的方法没问题,它会 运行,如果不检查方法。
>Controller
>>>AuthController
>>>UserController
然后像Authen一样对控制器进行下一步检查
在我的例子中,我有两个相同的内部 类。
将它们提取到一个重构命名空间和 voilá,所有恢复正常工作。
我在使用 Swagger 和 Microsoft.AspNetCore.OData 时遇到了同样的错误。我通常尝试使用最新版本 - 但将其降至 v 7.5.12 - 确实解决了我的问题。
还向控制器中的每个 Action 方法添加以下内容,使其也可以与 OData v8.x 一起使用:[HttpGet]、[HttpPost] 或 [ApiExplorerSettings(IgnoreApi = true)]
当我尝试将 Swagger 文档集成到 ASP.NET Core 3.1 Web API 项目。我尝试了几乎所有上述建议但都失败了。
hit-and-trial 一小时后,我决定使用 this reference 来尝试 NSwag,而不是 Swashbuckle,它只是工作起来很有魅力:)
我遇到了类似的问题 - 根本原因是我忘记添加注释了:-(
此错误的原因
我通过这种方式解决了这个问题
在 api 控制器方法上方使用 [HttpGet]
属性。
而且,由于swashbuckle的版本不同,可能会出现这些错误。
你应该使用正确的 swagger 端点url
v1/swagger.json or swagger/v1/swagger.json
根据您使用的版本选择以上一项。
注:
参考官方swagger文档。
crystal 清晰的文件中有很多信息
https://swagger.io/docs/
'Multiple operations with path 'some_path' and method 'GET' '
[HttpGet]
public IActionResult Get()
{
return Ok(_userService.Get());
}
[HttpGet]
public IActionResult Get(int Id)
{
return Ok(_userService.Get(Id));
}
只需修改DataAnnotation:
[HttpGet]
public IActionResult Get()
{
return Ok(_userService.Get());
}
[HttpGet("{Id}"] //HERE
public IActionResult Get(int Id)
{
return Ok(_userService.Get(Id));
}
我遇到了同样的错误,解决方法是在我的控制器中添加 [HttpGet] 属性
开始吧:
我创建了 WEB 控制器而不是 WEB API 控制器。这就造成了这种错误。
在创建新控制器的过程中,确保您创建了正确的 WEB API 控制器。
尝试结合托管在 IIS Express 上的 Web 应用程序来设置 swagger。 API 是使用 ASP Net Core 构建的。我已按照有关 Swashbuckle 和 ASP.NET Core 的相关 Microsoft 帮助页面上规定的说明进行操作。
到目前为止,我已经加载了 swagger 页面,并且可以看到我定义的 SwaggerDoc 正在加载,但是 API 不存在。当前出现以下错误:
"Fetch error undefined ./swagger/v1/swagger.json"
public class Startup
{
// This method gets called by the runtime. Use this method to add services to the container.
public void ConfigureServices(IServiceCollection services)
{
// services.AddDbContext<TodoContext>(opt =>
// opt.UseInMemoryDatabase("TodoList"));
services.AddMvc()
.SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
// Register the Swagger generator, defining 1 or more Swagger documents
services.AddSwaggerGen(c =>
{
c.SwaggerDoc("v1", new Info { Title = "API WSVAP (WebSmartView)", Version = "v1" });
});
}
// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
// Enable middleware to serve generated Swagger as a JSON endpoint.
app.UseSwagger();
// Enable middleware to serve swagger-ui (HTML, JS, CSS, etc.),
// specifying the Swagger JSON endpoint.
app.UseSwaggerUI(c =>
{
c.SwaggerEndpoint("./swagger/v1/swagger.json", "My API V1");
c.RoutePrefix = string.Empty;
});
app.UseMvc();
}
}
所以在进行了大量的故障排除之后,基本上可以归结为两件事,但我觉得总的来说这可能对将来的其他人有所帮助,所以我发布了一个答案。
首先 - 如果您遇到上述错误,实际查看发生了什么的最佳方法是将以下行添加到您的 Configure() 方法
app.UseDeveloperExceptionPage();
现在,如果您导航到 'swagger/v1/swagger.json' 页面,您应该会看到更多信息,这些信息将为您指明有用的方向。
其次-现在对我来说错误是
'Multiple operations with path 'some_path' and method 'GET' '
然而,这些 API 位于依赖库内部,因此我无法在定义点应用解决方案。作为一种解决方法,我发现将以下行添加到您的 ConfigureServices() 方法可以解决问题
services.AddSwaggerGen(c =>
{
c.SwaggerDoc("v1", new Info { Title = "API WSVAP (WebSmartView)", Version = "v1" });
c.ResolveConflictingActions(apiDescriptions => apiDescriptions.First()); //This line
});
最后 - 毕竟我能够生成 JSON 文件,但我仍然无法提取 UI。为了使这项工作正常进行,我不得不更改 Configure()
中的终点app.UseSwaggerUI(c =>
{
c.SwaggerEndpoint("./v1/swagger.json", "My API V1"); //originally "./swagger/v1/swagger.json"
});
我不确定为什么这是必要的,尽管可能值得注意的是 Web 应用程序的虚拟目录托管在 IIS 上,这可能会产生影响。
注意:导航至 swagger/v1/swagger.json 将为您提供更多详细信息,对我来说,这是由于未修饰的操作引起的问题。 @MarkD
的评论中提到了此信息希望这对以后的人有所帮助。
我有类似的问题,我在有问题的控制器方法上使用 Route
属性解决了它:
[HttpGet, Route("Throw")]
public ActionResult<string> Throw()
{
_logger.LogInformation("I think I am going to throw up");
throw new NotSupportedException("For testing unhandled exception logging.");
}
我觉得 ResolveConflictingActions
可能会掩盖真正的问题。
在我的例子中,控制器 class 和 URL 中有两个方法具有相同的注释。 (我们的团队使用 Entity Framework、ASP.NET 和 Swagger。)
[HttpGet("GetMyGreatData/{patientId}")]
[ValidatePatient]
public async Task<ActionResult<ServiceResponse<IEnumerable<MyGreatModel>>>> GetMyGreatData(
[FromRoute] int patientId, int offset = 0, int limit = 0)
{
//method details...
}
[HttpGet("GetMyGreatData/{patientId}")]
[ValidatePatient]
public async Task<ActionResult<ServiceResponse<IEnumerable<MyGreatModel>>>> GetMyGreatData(
[FromRoute] int patientId,
[FromQuery] DateTimeOffset? startdate = null,
[FromQuery] DateTimeOffset? endDate = null,
int offset = 0,
int limit = 0)
{
//method details...
}
删除一种方法解决了我的问题。
我有两个问题导致了同样的错误。
我在两个不同的命名空间下有两个同名的类。在生成 swagger 文档时,Swagger 无法协调这一点。为了修复它,我添加了行
options.CustomSchemaIds(x => x.FullName);
我有一个没有 [HttpGet] 注释的方法。 Swagger 需要显式定义 HTTP 端点。
我在 API 加载后通过检查 visual studio 中的输出发现了这两个问题。
我在这个问题上只花了两个小时,但我的原因完全不同,它与路由或注释无关。我有 2 个 class 同名(但命名空间不同):MyProject.Common.ClassName
和 MyProject.Api.ClassName
。 Swagger/swashbuckle 无法分辨两者之间的区别,所以我得到了那个无用的错误。
这 2 个小时用于 trial-and-error 评论控制器和端点,最终找到 3 个端点违规端点。所有 3 个端点都有不同的路由、不同(或没有)自定义授权和不同的方法名称。事实证明,所有 3 个端点要么接受一个参数,要么返回一个对象,其中包含我的 class 的 API 版本。没有使用通用版本。 Swagger 无法区分它们,吐了一身。
为什么哦,为什么 Swagger 或 Swashbuckle 不能提供实际的错误消息?本来可以节省我几个小时...
我一直在使用 .Net Core 3.1,我花了一些时间来找出并理解发生了什么。
问题可能由多种不同原因引起:
Swagger 配置错误
类 具有相同的名称但在不同的命名空间中
Public 没有 rest 属性的方法(Get、Post 等)
首先,请看下面的 link 以检查您的设置是否正确:
Add Swagger(OpenAPI) API Documentation in ASP.NET Core 3.1
然后,
找出问题的一个好方法是 运行 不使用 IISExpress 的应用程序并检查控制台日志。生成文档时发现的任何错误都将显示在那里。
在我的例子中,问题是我有一个没有任何 rest 属性的 public 方法(应该是私有的):
将方法从 public 更改为 private 后我解决了问题。
我通过打开网络选项卡并查看 swagger.json
的响应找到了错误我以前遇到过同样的错误,在努力寻找原因后,我发现我的一个控制器中的一个 API 没有 HTTP 动词作为属性,所以我修复了它通过将 [HttpGet] 放在我的 API 上。 所以这是我的建议,检查你的 API 控制器,也许你忘记了和我一样的东西!
看看我的代码,我意识到我应该改变这个:
public async Task<Product> ProductDetail(int id)
{
return await _productQueries.GetProductDetail(id);
}
对此:
[Route("ProductDetail")]
[HttpPost]
public async Task<Product> ProductDetail(int id)
{
return await _productQueries.GetProductDetail(id);
}
我遇到了同样的问题,基本控制器没有用 Http 装饰,删除它后它就可以工作了。
只需导航到 https://localhost:{PortNo}/swagger/v1/swagger.json
并获取有关错误消息的更多详细信息。
将应用服务部署到 Azure 时可能会发生此错误。我已将应用服务重新部署到 Azure,错误消失了。
当这件事发生在我身上时,我追踪到 URL 带有下划线的路径参数,它与 asp 生成器
兼容改变这个:
/block-content/{machine_name}:
对此
/block-content/{machineName}:
帮我解决了
我在 .NET 5.0 中也遇到了类似的问题,我通过以下方式解决了:
我在控制器上添加了这一行作为属性:
[Consumes("application/json")]
我只是忘记在添加 HTTP 属性后立即在我的控制器中添加 HTTP 属性,这对我来说就像一个魅力。
来源:https://www.benday.com/2020/12/16/webapi-core-swagger-failed-to-load-api-definition-error/
我遇到了同样的问题,所以我在浏览器上使用 inspect element 检查了它。 “控制台”选项卡显示问题源自的文件 (v1/swagger/json:1)。通过单击打开它显示我在控制器中使用的辅助方法之一是“Public”。将其更改为“私人”解决了我的问题。
这个页面也有很好的提示: https://btrehberi.com/swagger-failed-to-load-api-definition-fetch-error-undefined-hatasi-cozumu/yazilim/
在我的案例中,Swagger 需要控制器中所有 public 成员的 [HttpAction]。不幸的是,我拼错了构造函数名称,因为它是 public,所以抛出了这个错误。
对于 ASP.NET Core 3.1,我必须确保动词没有歧义,我首先 运行 VS2019 中没有 IIS 的 API 项目发现了这一点(绿色箭头 > 左-单击胡萝卜图标和 select 项目名称,这会导致控制台 window 出现在启动时,以便您可以检查发生了什么并查看错误)。
[HttpGet("MyEndPointA")
这样Swagger就可以正确生成文档了。
<b>make sure the name "v1" matches the path in the swagger endpoint</b>
<p>
services.AddSwaggerGen(c =>
{
c.SwaggerDoc("v1", new OpenApiInfo {
Title = "ODAAPP",
Version = "v1" });
});
</p>
<br/>
app.UseSwaggerUI(c => c.SwaggerEndpoint("/swagger/v1/swagger.json",
"ODAAPP v1"));
enter code here
我一直在使用 .NET 5,我花了一些时间试图了解发生了什么。
我收到如下错误:
然后我通过以下方式解决了这个问题:
打开startup.cs文件 在Configure方法
中添加如下代码 if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
app.UseSwagger(c =>
{
c.RouteTemplate = "/swagger/{documentName}/swagger.json";
});
app.UseSwaggerUI(c => c.SwaggerEndpoint("/swagger/v1/swagger.json", "API v1"));
}
并在 ConfigureServices 方法中
services.AddSwaggerGen(c =>
{
c.SwaggerDoc("v1", new OpenApiInfo { Title = "API", Version = "v1" });
c.ResolveConflictingActions(apiDescriptions => apiDescriptions.First());
});
感谢TheCodeBuzz for Resolved: Failed to load API definition (undefined /swagger/v1/swagger.json)
注意 RouteTemplate 字符串和 SwaggerEndpoint 字符串之间的区别。一个使用 {documentName},另一个使用“v1”作为文字。
如果您对多个操作方法使用相同的路由,也会发生这种情况(可以重载)
在我的例子中,项目被配置为在 startup.cs 使用 AddPolicy() 使用身份服务器 4 进行身份验证,并且有 [Authorize]
的用法我删除了 startup.cs 的东西和 [Authorize]
的用法会尽快更新
解决了 dotNet 6 中的问题!只需更改 [ApiController]
肯定是Controller的某个方法出了问题。为了得到这个方法,有时你可能需要把你所有的控制器都拿出来,一个接一个地尝试插入,然后你会一起测试找到有错误的控制器。
例如。如果你喜欢 3Controllers 说
>Controller
>>>AuthController
>>>UserController
>>>HomeController
从控制器中取出两个,每次测试成功后,再添加一个控制器来测试控制器。有了它你就会知道控制器有错误的方法。
>Controller
>>>AuthController
>Controller
>>>AuthController
>>>UserController
然后像Authen一样对控制器进行下一步检查
在我的例子中,我有两个相同的内部 类。 将它们提取到一个重构命名空间和 voilá,所有恢复正常工作。
我在使用 Swagger 和 Microsoft.AspNetCore.OData 时遇到了同样的错误。我通常尝试使用最新版本 - 但将其降至 v 7.5.12 - 确实解决了我的问题。
还向控制器中的每个 Action 方法添加以下内容,使其也可以与 OData v8.x 一起使用:[HttpGet]、[HttpPost] 或 [ApiExplorerSettings(IgnoreApi = true)]
当我尝试将 Swagger 文档集成到 ASP.NET Core 3.1 Web API 项目。我尝试了几乎所有上述建议但都失败了。 hit-and-trial 一小时后,我决定使用 this reference 来尝试 NSwag,而不是 Swashbuckle,它只是工作起来很有魅力:)
我遇到了类似的问题 - 根本原因是我忘记添加注释了:-(
此错误的原因
我通过这种方式解决了这个问题
在 api 控制器方法上方使用 [HttpGet]
属性。
而且,由于swashbuckle的版本不同,可能会出现这些错误。
你应该使用正确的 swagger 端点url
v1/swagger.json or swagger/v1/swagger.json
根据您使用的版本选择以上一项。
注:
参考官方swagger文档。 crystal 清晰的文件中有很多信息 https://swagger.io/docs/
'Multiple operations with path 'some_path' and method 'GET' '
[HttpGet]
public IActionResult Get()
{
return Ok(_userService.Get());
}
[HttpGet]
public IActionResult Get(int Id)
{
return Ok(_userService.Get(Id));
}
只需修改DataAnnotation:
[HttpGet]
public IActionResult Get()
{
return Ok(_userService.Get());
}
[HttpGet("{Id}"] //HERE
public IActionResult Get(int Id)
{
return Ok(_userService.Get(Id));
}
我遇到了同样的错误,解决方法是在我的控制器中添加 [HttpGet] 属性
开始吧:
我创建了 WEB 控制器而不是 WEB API 控制器。这就造成了这种错误。 在创建新控制器的过程中,确保您创建了正确的 WEB API 控制器。