我正在尝试将流转换为类,但我一直以 HTML(而不是 json)形式接收流。清理浏览器缓存没有帮助。
using Microsoft.AspNetCore.Mvc;
using Model;
using System.Text.Json;
namespace Web.Controllers.HttpControllers
{
public class LeagueClientController : ControllerBase
{
private readonly Uri _leagueRequest;
private readonly BetDBContext _dbContext;
private readonly HttpClient _httpClient;
public LeagueClientController(IHttpClientFactory factory, BetDBContext dbContext)
{
_leagueRequest = new Uri("https://www.api-football.com/leagues");
_dbContext = dbContext;
_httpClient = factory.CreateClient("BetHttpClient");
}
[HttpGet]
[Route("[controller]")]
public async Task<League> GetLeagues()
{
try
{
var leagueResponse = await _httpClient.GetAsync(_leagueRequest)??throw new NullReferenceException();
if (leagueResponse.IsSuccessStatusCode)
{
Stream stream = await leagueResponse.Content.ReadAsStreamAsync();
if (stream != null)
{
var league = await JsonSerializer.DeserializeAsync<League>(stream)??throw new ArgumentNullException();
await _dbContext.AddAsync(league);
await _dbContext.SaveChangesAsync();
}
}
}
catch (ArgumentNullException e)
{
Console.WriteLine($"{e.Message} - can not connect to remote source");
}
return new League();
}
}
}
这是我的 IHttpClientFactory 的设置方式:
builder.Services.AddHttpClient("BetHttpClient", httpClient =>
{
httpClient.BaseAddress = new Uri("https://v3.football.api-sports.io/");
httpClient.DefaultRequestHeaders.Add("x-apisports-key", "it is secret");
httpClient.DefaultRequestHeaders.Add("x-rapidapi-host", "v3.football.api-sports.io");
httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
});
谢谢!!!
我希望获得 json 格式的流:),但不知道如何制作它。
这是你想要的吗?
public async Task<IActionResult> PrivacyAsync()
{
var httpClient = _httpClientFactory.CreateClient();
var httpResponseMessage = await httpClient.GetAsync("https://localhost:7168/WeatherForecast/getjson");
if (httpResponseMessage.IsSuccessStatusCode)
{
string res = await httpResponseMessage.Content.ReadAsStringAsync();
Stream stream = await httpResponseMessage.Content.ReadAsStreamAsync();
if (stream != null)
{
var userInfo = await JsonSerializer.DeserializeAsync<UserModel>(stream) ?? throw new ArgumentNullException();
}
}
return View();
}
这是我的 API:
[HttpGet("getjson")]
[Produces("application/json")]
public IActionResult getData() {
var obj = new {
age=18,
name="user"
};
return Ok(obj);
}