gpt4 book ai didi

c# - 从 Blazor 客户端调用 HttpClient.GetJsonAsync 返回(带数据),但随后超时

转载 作者:太空宇宙 更新时间:2023-11-03 22:33:47 24 4
gpt4 key购买 nike

我正在制作 Http.JsonAsync<MyType>("api/MyController/Users");调用很快返回,但在 5 秒后超时,而不是给我数据。

我已经进行了其他类似的调用,但效果很好,但发生了一些奇怪的事情。

我从标准天气服务 Blazor 客户端模板开始,一切正常

我从按钮事件开始

<button onclick=@load_click>LOAD!</button>

@functions {
private void load_click()
{
try
{
Logger.Log($"about to call PopulateExistingUsers");

var taskUsers = Http.GetJsonAsync<UsersPageData>("api/ShowerQ/Users");

Logger.Log($"returned from async requesting users");
if (!taskUsers.Wait(5000))
{
throw new Exception($"timeout!");
}
var users = taskUsers.Result;
Logger.Log($"populated existing users ok. Users.Count = {users.Users.Count()}");
}
catch (Exception e)
{
Logger.Log(e.ToString());
}
}

服务器端 Controller 代码:

[HttpGet("Users")]
public UsersPageData GetUsers()
{

try
{
var users = _repos.GetAllUsers().ToList();
Log($"returned from GetALlUsers() with {users.Count} users");

return new UsersPageData() {Users = users};
}
finally
{
Log($"aft6er returning from method {nameof(GetUsers)}");
}
}

Logger.Log就是Console.Writeline , 它转到浏览器控制台 - 非常方便!

预期:将输出记录到控制台:“填充现有用户正常。Users.Count = 3”

实际日志:

我得到的输出是:

WASM: 09:31:26.49:about to call PopulateExistingUsers

WASM: 09:31:26.56:returned from async requesting users

WASM: 09:31:31.57:System.Exception: timeout!

WASM: at ShowerQWeb2.Client.Pages.Index.load_click () [0x00048] in C:\Users\XXXX\Source\repos\ShowerQWeb2\ShowerQWeb2.Client\Pages\Index.razor:62

在服务器端(它在同一台机器上运行,所以时钟在一个小时内是同步的)

10:31:26.68:returned from GetALlUsers() with 3 users

10:31:26.68:aft6er returning from method GetUsers

chrome 网络调试显示返回的内容:响应头:

Date: Mon, 13 May 2019 09:31:26 GMT
{"users":[{"id":1,"name":"David XX"},{"id":2,"name":"Sumith YY"},{"id":3,"name":"David ZZ"}]}

那么,看起来反序列化可能会卡住?

最佳答案

您可能会因为滥用异步而陷入僵局。你不应该调用 .Wait().Result,正确使用异步代码。

首先使方法async 并返回一个Task:

private async Task load_click()
{
// snip
}

然后 await 您的 HTTP 正确调用:

var users = await Http.GetJsonAsync<UsersPageData>("api/ShowerQ/Users");

关于c# - 从 Blazor 客户端调用 HttpClient.GetJsonAsync 返回(带数据),但随后超时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56109867/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com