【发布时间】:2022-09-24 06:36:45
【问题描述】:
我正在尝试使用GraphQLHttpClient 使用我的asp.net core mvc 应用程序调用Yelp 的GraphQL api 的业务端点。我在客户端实例中配置了 api 和 bearer token。我遵循查询结构here,使用业务作为端点,我只想要数据中的 Id 和 Name 字段。当我调用SendQueryAsync(query) 时,我从响应中得到GraphQL 错误。我不确定我是否做错了httprequest 和/或我的查询写错了。我找不到任何关于使用 C# 使用 Yelp 的 GraphQL api 的 YouTube 视频、stackoverflow 问题或 github 项目。任何帮助表示赞赏。谢谢!以下是我的源代码和附加响应。
[更新:已解决]
有一系列问题。向 GraphQL 请求的 YelpGraphQL 查询添加了带有变量的附加必填字段。此thread 中解释了有关查询结构和变量声明的更多信息。覆盖字段的外壳(ty Neil)。修复了 responsetype 类并添加了缺失的类(ty Neil)。通过依赖注入向控制器添加了 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
{
public 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>();
}
YelpGraphQL Json 数据示例
{
\"data\": {
\"search\": {
\"business\": [
{
\"id\": \"wGl_DyNxSv8KUtYgiuLhmA\",
\"name\": \"Bi-Rite Creamery\"
},
{
\"id\": \"lJAGnYzku5zSaLnQ_T6_GQ\",
\"name\": \"Brenda\'s French Soul Food\"
}
]
}
}
}
-
你能发布你得到的确切错误/异常吗
-
@Neil 在我的控制器获取操作运行后我没有收到错误,但我发布了 GraphQL 调试错误。这有帮助还是你指的是别的东西?
-
这向我表明您的响应类不正确。将 JSON 响应粘贴到任何 JSON to classes 网站中,并获取正确的类定义。
标签: c# asp.net-mvc api graphql yelp