我有一个 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的评论之外,可能还有两个错误:
- 使用
.Result.Content
获得Result
的方式存在死锁的风险。您需要将代码更改为await ...
- 此外,如果使用 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
并向我们显示错误消息?