Blazor HttpClient.GetFromJsonAsync()无法按预期工作

gr8qqesn  于 2022-12-24  发布在  其他
关注(0)|答案(1)|浏览(177)

使用HttpClient.GetFromJsonAsync()Content.ReadFromJsonAsync<T>()时,某些属性无法正确解析。
Chrome调试器正确解析了UserSsid属性:

但是HttpClient没有:

    • Blazor-客户端代码**
async Task WaitForExport(string location)
{
    while (await periodicTimer.WaitForNextTickAsync())
    {
        var response = await Http.GetAsync(location, HttpCompletionOption.ResponseContentRead);
        if (response != null && response.IsSuccessStatusCode)
        {
            var exportStatus = await response.Content.ReadFromJsonAsync<ExportStatusModel>();
            if (exportStatus != null)
            {
                return;
            }
        }
    }
}
    • 主计长**
[HttpGet("export-status")]
public async Task<ActionResult<ExportStatusModel>> GetExportStatus(Guid guid)
{
    var model = await _exportRequestRepository.GetExportStatus(guid);
    if (model == null)
        return NotFound();

    return Ok(model);
}
    • 型号**
public class ExportStatusModel
{
    public Guid Guid { get; set; }
    public int Status { get; set; }
    public string UserSsid { get; set; } = string.Empty;
    public int DocumentId { get; set; } = -1;
}

我已经试过先把Content读为string,然后再解析它,但是它返回了一个十六进制字符串,而不是原始的json。在blazor wasm中将这个十六进制字符串转换为ascii失败了。但是在控制台应用程序中它工作正常。
我还注意到响应中缺少了Content-Length头,也许这会破坏json序列化器?

jyztefdp

jyztefdp1#

字符串为十六进制:
53 == 'S'和二维== '-'
您可以将其转换为一个普通字符串,至少使用:

string newssid = "";

for (int i = 0; i < ssid.Count(); i+=2)
{
  newssid += "" + (char)Convert.ToByte(ssid.Substring(i, 2), 16);
}

我不知道为什么是十六进制的。也许你在VisualStudio中打开了“显示为十六进制”。
右击字段并检查是否选中十六进制显示!

相关问题