You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.NET Core如何调用第三方Web API取数并自建对外接口?

问题解答

1. 能否在.NET Core中调用第三方Web API、使用API密钥获取数据?

完全可以,你当前代码中使用HttpClient调用第三方金价接口的逻辑方向是正确的。如果对方接口要求传入API密钥,只需要在发送请求前给HttpClient加上对应请求头即可,通常写法示例:

// 按照第三方接口要求的格式添加密钥,常见为Bearer认证或自定义头
client.DefaultRequestHeaders.Add("Authorization", "Bearer 你的API密钥");
// 或自定义头的情况
client.DefaultRequestHeaders.Add("X-API-Key", "你的API密钥");

2. 接口是否需要标注[HttpPost]特性?

是否加[HttpPost]完全取决于你自己的接口对外提供的请求方式,以及业务场景是否符合Post的使用规范:

  • 你现有的GetGoldPrice方法没有标注任何请求特性,默认支持Get请求,你的逻辑是只读查询金价列表,用Get完全符合规范,不需要加[HttpPost]。
  • 你现有的GetReservation方法虽然标注了[HttpPost],但逻辑是根据id查询单条数据,属于只读操作,用Get更符合REST设计规范,完全可以把[HttpPost]改成[HttpGet],只有当你需要传递大量参数、或者参数包含敏感信息不适合放在url中时,再考虑用Post。

3. 如何开发自己的API?

你当前写的是MVC控制器(继承Controller,返回的是视图View),如果要做纯Web API只返回数据的话,做几个小调整即可:

  • 让控制器继承ControllerBase,标注[ApiController]、[Route("[controller]/[action]")]这类路由特性
  • 把返回值从View(xxx)改成Ok(xxx),直接返回业务数据即可
    示例调整后的代码框架:
[ApiController]
[Route("api/[controller]")]
public class GoldPriceDetailController : ControllerBase
{
    // 建议通过注入获取HttpClient,不要手动new
    private readonly HttpClient _httpClient;
    public GoldPriceDetailController(IHttpClientFactory httpClientFactory)
    {
        _httpClient = httpClientFactory.CreateClient();
        _httpClient.BaseAddress = new Uri("https://apigw.bank.com.tr:8003/");
        _httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
    }

    [HttpGet]
    public async Task<IActionResult> GetGoldPrice()
    {
        List<GoldPrice> goldPriceList = new List<GoldPrice>();
        HttpResponseMessage res = await _httpClient.GetAsync("getGoldPrices");
        if (res.IsSuccessStatusCode)
        {
            // 不要用.Result,用await避免死锁
            var objResponse = await res.Content.ReadAsStringAsync();
            goldPriceList = JsonConvert.DeserializeObject<List<GoldPrice>>(objResponse);
        }
        return Ok(goldPriceList);
    }
}

现有代码的注意点

  • 不要每次请求都手动new HttpClient,会导致套接字资源耗尽,建议用.NET Core自带的IHttpClientFactory注入获取实例,只需在Program.cs中注册builder.Services.AddHttpClient();即可使用。
  • GetReservation方法中的请求url拼接有误,当前写法"https://apigw.bank.com.tr:8443/getGoldPrices" + id会缺少分隔符,需要根据第三方接口的规则补上,比如getGoldPrices/{id}或者getGoldPrices?id={id}的格式。
  • 异步方法中不要用.Result同步阻塞等待结果,统一用await,避免出现死锁问题。

内容的提问来源于stack exchange,提问作者Aysenur

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 04:24:05