如何以正确的形式获取流 - System.Text.Json;

问题描述 投票:0回答:1

我正在尝试将流转换为类,但我一直以 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 格式的流:),但不知道如何制作它。

c# asp.net-core stream system.text.json
1个回答
0
投票

这是你想要的吗?

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);
}

© www.soinside.com 2019 - 2024. All rights reserved.