C# 为什么blazor中出现http客户端错误?

C# 为什么blazor中出现http客户端错误?,c#,asp.net-core,blazor,C#,Asp.net Core,Blazor,当我试图导航到Blazor应用程序的登录页面时,它总是出错。我认为错误来自于此。我已经在程序中安装了HTTP客户端包。也为创业提供了参考 “没有类型为'System.Net.Http.HttpClient'的注册服务。” 名称空间GLI { 公营创业 { 公共启动(IConfiguration配置) { 配置=配置; } 公共IConfiguration配置{get;} //此方法由运行时调用。请使用此方法将服务添加到容器中。 //有关如何配置应用程序的更多信息,请访问https://go.mi

当我试图导航到Blazor应用程序的登录页面时,它总是出错。我认为错误来自于此。我已经在程序中安装了HTTP客户端包。也为创业提供了参考

“没有类型为'System.Net.Http.HttpClient'的注册服务。”

名称空间GLI
{
公营创业
{
公共启动(IConfiguration配置)
{
配置=配置;
}
公共IConfiguration配置{get;}
//此方法由运行时调用。请使用此方法将服务添加到容器中。
//有关如何配置应用程序的更多信息,请访问https://go.microsoft.com/fwlink/?LinkID=398940
public void配置服务(IServiceCollection服务)
{
services.AddRazorPages();
AddServerSideBlazor();
services.AddTokenAuthenticationStateProvider();
services.AddHttpClient();
services.AddSingleton();
var secretkey=Encoding.ASCII.GetBytes(ClsGlobal.Secret);
//配置JWToken身份验证
services.AddAuthentication(auth=>
{
auth.DefaultAuthenticateScheme=JwtBearerDefaults.AuthenticationScheme;
auth.DefaultChallengeScheme=JwtBearerDefaults.AuthenticationScheme;
})
.AddJwtBearer(令牌=>
{
token.RequireHttpsMetadata=false;
token.SaveToken=true;
token.TokenValidationParameters=新的TokenValidationParameters
{
ValidateSuersigningKey=true,
IssuerSigningKey=新对称安全密钥(secretkey),
validateisuer=true,
//ValidisUser=”http://localhost:45092/",
ValidateAudience=true,
有效性=”https://localhost:44358/",
RequireExpirationTime=true,
ValidateLifetime=true,
时钟偏移=时间跨度0
};
});
}
@代码{
RazorComponents.MaterialDesign.MdcDialog对话框;
LoginCredentials凭据=新LoginCredentials();
布尔最后的签名失败了;
公共任务签名()
=>dialog.ShowAsync();
公共任务签出()
=>AuthStateProvider.SetTokenAsync(空);
异步任务子目录()
{
var result=wait Http.PostJsonAsync(“api/user/login”,凭证);
lastSigninFailed=result.Token==null;
如果(!lastSigninFailed)
{
//成功!在基础身份验证状态服务中存储令牌
等待AuthStateProvider.SetTokenAsync(result.Token);
//重置用户界面状态
wait dialog.HideAsync();
凭证=新的登录凭证();
}
}
}

如果您可以向我们显示startup.cs文件,那将很有帮助,但您可以尝试将此文件添加到startup.cs以注册HttpClient服务

if (!services.Any(x => x.ServiceType == typeof(HttpClient)))
{
    services.AddScoped<HttpClient>(s =>
    {
        var uriHelper = s.GetRequiredService<NavigationManager>();
        return new HttpClient
        {
            BaseAddress = new Uri(uriHelper.BaseUri)
        };
    });
}
if(!services.Any(x=>x.ServiceType==typeof(HttpClient)))
{
services.AddScoped(s=>
{
var uriHelper=s.GetRequiredService();
返回新的HttpClient
{
BaseAddress=新Uri(uriHelper.BaseUri)
};
});
}

我猜您将HttpClient注入到类构造函数中了?您能显示startup.cs文件吗?嗨,R.Alfred,我知道您是一个新用户,您的问题被投票关闭,我不想让您对StackOverflow感到太气馁。请参阅本指南,询问问题:问题应具体,并显示简短的relevant代码块,如果可能的话。我尽了最大努力发布了一个希望有用的答案。编辑很有用,但请注意,您标记了
[blazor clientside]
这是错误的-您使用的是服务器端。这种差异在这里很重要。是的,这是我的一个错误。在服务器端blazor上,我应该创建自己的HttpClient实例,而不是在我的组件中只使用@inject HttpClient。我之所以会出现这种错误,是因为DI和inject HttpClient中没有实例没有添加一个。
if (!services.Any(x => x.ServiceType == typeof(HttpClient)))
{
    services.AddScoped<HttpClient>(s =>
    {
        var uriHelper = s.GetRequiredService<NavigationManager>();
        return new HttpClient
        {
            BaseAddress = new Uri(uriHelper.BaseUri)
        };
    });
}