当我尝试注入HttpClient时,剃须刀页面出现错误:
未处理的承诺拒绝:错误:System.InvalidOperationException: 无法为type的属性“ Http”提供值。没有 类型为“ System.Net.Http.HttpClient”的注册服务。
请仔细检查并提供反馈。
答案 0 :(得分:1)
如果您向代码段提供要执行的操作,则更容易回答您的问题。但是没问题。现在,我将向您展示一个示例,您需要执行哪些操作才能使用DI注入服务。
ChartDataService.cs
namespace MyBlazorApp.Services
{
public class ChartDataService: IChartDataService
{
public HttpClient httpClient;
public ChartDataService(HttpClient httpClient)
{
this.httpClient = httpClient;
}
public async Task < IEnumerable < ChartData >> GetChartData()
{
return await httpClient.GetJsonAsync < ChartData[] > ($ "myUri");
}
}
}
IChartDataService.cs
namespace MyBlazorApp.Services
{
public interface IChartDataService
{
Task < IEnumerable < ChartData >> GetChartData();
}
}
Startup.cs
// other
public void ConfigureServices(IServiceCollection services)
{
services.AddRazorPages();
services.AddServerSideBlazor();
// some services
services.AddHttpClient < IChartDataService, ChartDataService > (client =>
{
client.BaseAddress = new Uri(myBaseUri);
});
}
MyRazorPage.razor.cs (when using code Behind)
[Inject] private IChartDataService ChartDataService { get; set; }
or in
MyRazorPage.razor
@code
{
[Inject] private IChartDataService ChartDataService { get; set; }
}
then in your code - block or code - behind file u can use something like this,
for example, in an async function..
protected override async Task OnInitializedAsync()
{
chartData = await ChartDataService.MakeChartData();
}
答案 1 :(得分:0)
在mode
中不需要Razor Component
请参见以下示例:
@inject
还有<div class="row">
<div class="col-4">
<label for="cities">Choose city</label>
<input type="text" class="form-control" id="citiy" @bind="@cityName" />
</div>
<div class="col-3">
<button class="btn btn-primary" @onclick=@GetWeather>Get weather for @cityName</button>
</div>
</div>
<div class="row">
<div class="col-8 offset-2">
<pre id="json"><code>@ResultStr</code></pre>
</div>
</div>
部分
@code
对我有用.. =)