我有一个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
使用.Result.Content
。您需要将代码更改为await ...
Http
在Blazor ServerSide App中调用与Blazor WebAssembly App不同。您需要创建自己的HttpClient或注入一个HttpClient,然后为其提供基本uri。希望以下内容能对您有所帮助:
(如果您使用的是Blazor ServerSide)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 ServerSide Http.BaseAddress = new Uri(navMgr.BaseUri); //如果您使用的是Blazor ServerSide // //添加凭据,如果您使用的是Blazor ServerSide // ...您的代码 //不要通过访问`.Result`属性来阻止它,请等待!等待Http.PostAsync(“ api / Blog / ReturnString”,content).Result.Content.ReadAsStringAsync();var resp =等待Http.PostAsync(“ api / Blog / ReturnString”,content); var featureImage =等待resp.Content.ReadAsStringAsync();
最后,如果上述代码不能解决问题,请您F12
在浏览器中按并向我们显示错误消息?
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句