如何在ASP.NET Core Web API中调用第三方REST API?(接口未显示在Swagger)
.NET Core Web API 调用第三方REST API 最简实现方案
一、先解决Swagger不显示控制器的问题
- 给控制器添加必要特性:确保
ThirdPartyAPIController类上标注[ApiController]和路由特性,示例:
[ApiController] [Route("api/[controller]")] public class ThirdPartyAPIController : ControllerBase { // 接口方法写在这里 }
- 给控制器方法添加HTTP动词特性:比如
[HttpGet]、[HttpPost],Swagger只会识别带这些特性的方法,示例:
[HttpGet("products")] public async Task<IActionResult> GetThirdPartyProducts() { // 逻辑代码 }
- 检查Program.cs的Swagger配置:确保已启用Swagger服务和中间件,示例核心代码:
var builder = WebApplication.CreateBuilder(args); // 添加控制器服务 builder.Services.AddControllers(); // 注册Swagger服务 builder.Services.AddSwaggerGen(c => { c.SwaggerDoc("v1", new() { Title = "你的API名称", Version = "v1" }); }); var app = builder.Build(); // 开发环境启用Swagger UI if (app.Environment.IsDevelopment()) { app.UseSwagger(); app.UseSwaggerUI(c => c.SwaggerEndpoint("/swagger/v1/swagger.json", "你的API名称 v1")); } app.MapControllers(); app.Run();
二、调用第三方API的核心实现
1. 注册HttpClient
在Program.cs中添加HttpClient的依赖注入(官方推荐,避免手动创建的资源泄漏问题):
builder.Services.AddHttpClient();
2. 控制器中注入并调用第三方API
在ThirdPartyAPIController中注入HttpClient,编写调用逻辑:
private readonly HttpClient _httpClient; // 构造函数注入HttpClient public ThirdPartyAPIController(HttpClient httpClient) { _httpClient = httpClient; } [HttpGet("products")] public async Task<IActionResult> GetProducts() { try { // 替换为你Postman测试通过的第三方API地址 var thirdPartyApiUrl = "https://第三方API域名/products"; // 自动反序列化为Product模型列表 var products = await _httpClient.GetFromJsonAsync<List<Product>>(thirdPartyApiUrl); return products == null ? NotFound() : Ok(products); } catch (HttpRequestException ex) { // 简单错误处理,可根据实际需求调整 return StatusCode(StatusCodes.Status503ServiceUnavailable, $"第三方API调用失败: {ex.Message}"); } }
3. 匹配第三方API的Product模型
根据第三方API返回的JSON结构,定义对应的模型类,示例:
public class Product { public int Id { get; set; } public string ProductName { get; set; } public decimal UnitPrice { get; set; } // 其他字段完全匹配第三方API返回的JSON键名 }
三、验证测试
启动项目后,访问/swagger路径,就能看到ThirdPartyAPIController下的api/ThirdPartyAPI/products端点,直接在Swagger中测试,或用Postman调用该端点,即可获取第三方API返回的数据。
内容的提问来源于stack exchange,提问作者Smuk
相关产品推荐
相关产品推荐

