应用在返回字符串时调用 Http.PostAsync 时停止工作



我有一个 Blazor 应用程序,它调用返回字符串的 WebAPI 方法,但是当它运行时,它只是停止。该应用程序保持打开状态,但似乎没有任何反应。

当我在控制器中放置断点时,它确实会运行。

var ms = new System.IO.MemoryStream();
await file.Data.CopyToAsync(ms);
status = $"Finished loading {file.Size} bytes from {file.Name}";
var content = new MultipartFormDataContent {
{ new ByteArrayContent(ms.GetBuffer()), ""upload"", file.Name }
};
string featureImage = await Http.PostAsync("api/Blog/ReturnString", content).Result.Content.ReadAsStringAsync();

以上是调用 WebAPI 方法的代码。下面是返回一个非常简单字符串的控制器。

[Authorize]
[HttpPost("[action]")]
public async Task<string> ReturnString()
{
return "123456";
}

> 除了@enet的评论之外,可能还有两个错误:

  1. 使用.Result.Content获得Result的方式存在死锁的风险。您需要将代码更改为await ...
  2. 此外,如果使用 Blazor 服务器端,请注意,在 Blazor 服务器端应用中调用Http与 Blazor WebAssembly 应用不同。您需要创建自己的 HttpClient 或注入一个,然后为其提供基本 uri。

希望以下内容有所帮助:

(如果使用的是 Blazor 服务器端(在启动中注册HttpClient相关服务:

services.AddHttpClient();   // only if you're using Blazor ServerSide

在 Blazor 组件/页面中:

@using System.Net.Http@inject IHttpClientFactory HttpClientFactory@*如果您使用的是 Blazor ServerSide*@@inject NavigationManager navMgr@*如果您使用的是 Blazor ServerSide*@ @code{var Http = HttpClientFactory.CreateClient((;如果你使用的是 Blazor 服务器端Http.BaseAddress = new Uri(navMgr.BaseUri(;如果你使用的是 Blazor 服务器端//...添加凭据(如果使用的是 Blazor 服务器端(//...您的代码 不要通过访问来阻止它。结果'财产,等待它!await Http.PostAsync("api/Blog/ReturnString", content(.Result.Content.ReadAsStringAsync((;var resp= await Http.PostAsync("api/Blog/ReturnString", content(;var featureImage = await resp.Content.ReadAsStringAsync((;

最后,如果上面的代码不能解决问题,您能否在浏览器中按F12并向我们显示错误消息?

相关内容

  • 没有找到相关文章

最新更新