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

.NET Core调用Core.ac.uk API返回结果与Postman/Angular/curl不一致的原因及修复方案

.NET Core调用Core.ac.uk API返回结果与Postman/Angular/curl不一致的原因及修复方案

我帮你分析下这个问题,最可能的原因是HttpClient默认的请求头与Postman/curl存在差异,尤其是User-Agent头。很多API会根据请求的User-Agent来调整返回内容,比如限制某些非浏览器/标准客户端的敏感字段(比如fullText)访问。

你可以对比下不同请求的User-Agent:

  • curl默认的User-Agent是类似curl/[版本号]
  • Postman的User-Agent通常是PostmanRuntime/[版本号]
  • 而.NET Core的HttpClient默认的User-Agent是dotnet-httpclient/[.NET版本号]或者更冗长的标识,Core.ac.uk的API可能对这类客户端做了fullText字段的限制。

修复方案:手动设置User-Agent头

你只需要在HttpClient中添加和curl/Postman一致的User-Agent,就能让请求“伪装”成和其他工具一样的客户端,大概率就能拿到完整的fullText字段了。

修改后的代码如下:

using System;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Threading.Tasks;

class Program
{
    static async Task Main()
    {
        var apiKey = "key";
        var url = "https://api.core.ac.uk/v3/search/works?q=biology&page=1&pageSize=10";
        
        using var client = new HttpClient();
        // 设置Authorization头
        client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", apiKey);
        // 添加模拟curl的User-Agent
        client.DefaultRequestHeaders.UserAgent.ParseAdd("curl/8.7.1");
        // 或者模拟Postman的User-Agent:
        // client.DefaultRequestHeaders.UserAgent.ParseAdd("PostmanRuntime/7.36.3");

        var response = await client.GetAsync(url);
        var content = await response.Content.ReadAsStringAsync();
        
        Console.WriteLine($"Status: {response.StatusCode}");
        Console.WriteLine("Response:");
        Console.WriteLine(content);
    }
}

其他可能的排查点

如果设置User-Agent后还是不行,你可以检查其他请求头的差异:

  • Accept头:确保设置Accept: application/json,虽然HttpClient默认也会接受JSON,但明确设置更稳妥:
    client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
    
  • Accept-Encoding头:Postman和curl默认会支持gzip/deflate,你也可以手动添加:
    client.DefaultRequestHeaders.AcceptEncoding.ParseAdd("gzip, deflate, br");
    

验证方法

你可以用Fiddler或者Wireshark抓包对比.NET Core请求和curl请求的所有头信息,找出剩下的差异后逐一补全,就能让请求和其他工具的请求完全一致了。

内容来源于stack exchange

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.08 07:39:54