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

ASP.NET Core MVC调用Yelp GraphQL API遇错及解决方案

在ASP.NET Core MVC中调用Yelp GraphQL API的问题解决

问题描述

我正尝试在ASP.NET Core MVC应用中使用GraphQLHttpClient调用Yelp GraphQL API的商家端点,已在客户端实例中配置好API地址和Bearer Token。参照指定的查询结构,仅想获取数据中的Id和Name字段,但调用SendQueryAsync(query)时收到GraphQL错误,不确定是请求参数还是查询语句有误,找不到相关C#调用示例,寻求帮助。

问题已解决

问题涉及多个方面,修复点如下:

  • 为Yelp GraphQL查询补充了带变量的必填字段
  • 使用JsonPropertyName特性处理字段大小写匹配问题
  • 修复并补充了对应响应结构的实体类
  • 通过依赖注入将SearchConsumer类注入到控制器中

以下是完整实现代码:

实体类与消费者定义

public class Business
{
    [JsonPropertyName("id")]
    public string Id { get; set; }
    [JsonPropertyName("name")]
    public string Name { get; set; }
}

public class Search
{
    [JsonPropertyName("business")]
    public List<Business> business { get; set; }
}

public class SearchResponseType
{
    [JsonPropertyName("search")]
    public Search Search { get; set; }
}

public interface ISearchConsumer
{
    Task<List<Business>> GetAllBusinesses();
}

public class SearchConsumer : ISearchConsumer
{
    private readonly ApplicationDbContext _dbContext;

    public SearchConsumer(ApplicationDbContext dbContext)
    {
        _dbContext = dbContext;
    }

    public async Task<List<Business>> GetAllBusinesses()
    {
        var authorization = _dbContext.Authorizations.FirstOrDefault().Token;
        var _client = new GraphQLHttpClient("https://api.yelp.com/v3/graphql", new NewtonsoftJsonSerializer());
        _client.HttpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", authorization);
        var query = new GraphQLRequest
        {
            Query = @"
            query($termId: String $locationId: String){
                search(term:$termId location:$locationId) {
                    business {
                        id
                        name
                    }
                }
            }",
            Variables = new
            {
                termId = "burrito",
                locationId = "san francisco"
            }
        };
        var response = await _client.SendQueryAsync<SearchResponseType>(query);
        var businesses = response.Data.Search.business;
        return businesses;
    }
}

控制器代码

public class YelpGraphQLController : Controller
{
    private readonly ISearchConsumer _consumer;

    public YelpGraphQLController(ISearchConsumer consumer)
    {
        _consumer = consumer;
    }

    public IActionResult Index()
    {
        return View();
    }

    [HttpGet]
    public async Task<IActionResult> Get()
    {
        var businesses = await _consumer.GetAllBusinesses();
        return Ok(businesses);
    }
}

依赖注入配置

ConfigureServices(builder.Services);

void ConfigureServices(IServiceCollection services)
{
    services.AddTransient<ISearchConsumer, SearchConsumer>();
}

Yelp GraphQL返回数据示例

{
  "data": {
    "search": {
      "business": [
        {
          "id": "wGl_DyNxSv8KUtYgiuLhmA",
          "name": "Bi-Rite Creamery"
        },
        {
          "id": "lJAGnYzku5zSaLnQ_T6_GQ",
          "name": "Brenda's French Soul Food"
        }
      ]
    }
  }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 22:55:23