我在Blazor 3.0.0-preview4-19216-03中有此代码,用于客户端应用程序:
namespace BlazorShared.Services
{
public interface ILogin
{
Task<string> Login();
}
public class LoginService : ILogin
{
private HttpClient _client;
public LoginService(HttpClient client)
{
_client = client;
}
public async Task<string> Login()
{
var myclient = new HttpClient();
var responseMessage = await myclient.GetAsync("http://www.google.es");
var content = await responseMessage.Content.ReadAsStringAsync();
Debug.WriteLine(content);
return content;
}
}
}
public class Startup
{
public void ConfigureServices(IServiceCollection services)
{
services.AddSingleton<ILogin, LoginService>();
}
public void Configure(IComponentsApplicationBuilder app)
{
app.AddComponent<App>("app");
}
}
和此HTML
@functions {
public async Task Submit()
{
var str = await LoginService.Login(null, null, null);
Console.WriteLine(str);
}
}
完整的剃刀文件:https://pastebin.com/3LbQQvk0
我已经对其进行了测试,并且Web请求从未完成,并且我无法在客户端中显示服务响应。我尝试在instructions之后使用chrome进行调试,并且看到正在调用service方法,但没有调用服务的构造函数,而且据我了解,Blazor应该注入HttpClient。有什么想法会发生什么吗?谢谢。
答案 0 :(得分:4)
以下是错误的,即使它不是罪魁祸首... 在LoginService中,定义一个HttpClient变量,在其中分配DI提供的HttpClient实例。另一方面,您定义一个名为myclient的新HttpClient对象,并在Login方法中使用它。
您应该使用DI提供的对象。您不应该自己定义HttpClient对象。为什么呢因为Blazor为您配置了它创建的HttpClient。例如,设置文档基础URI,使您的Web应用程序可以作为SPA应用程序进行导航。
希望这对您有帮助...