InvalidOperationException:无法为类型 'CoronaAppCsarp.Pages.Index' 上的 属性 '_clientFactory' 提供值
InvalidOperationException: Cannot provide a value for property '_clientFactory' on type 'CoronaAppCsarp.Pages.Index'
我正在使用这个 api 创建这个 Corona 应用:https://covid19.mathdro.id/api. I have created a component for cards to show the data from the api, and when i am running the app it gives me this error:
我正在使用 System.Net.Http.Json。
这是我的模型:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
namespace CoronaAppCsarp.Data
{
public class CoronaModel
{
public Confirmed confirmed { get; set; }
public Recovered recovered { get; set; }
public Deaths deaths { get; set; }
public string dailySummary { get; set; }
public string image { get; set; }
public DateTime lastUpdate { get; set; }
}
public class Confirmed
{
public int value { get; set; }
public string detail { get; set; }
}
public class Recovered
{
public int value { get; set; }
public string detail { get; set; }
}
public class Deaths
{
public int value { get; set; }
public string detail { get; set; }
}
}
我的卡片组件:
<div class="card" style="width: 18rem;">
<div class="card-body">
<h5 class="card-title">@Title</h5>
<p class="card-text">@NumberOfCases</p>
<p class="card-text">@Date</p>
<p class="card-text">@Description.</p>
</div>
</div>
@code {
[Parameter]
public string Title { get; set; }
[Parameter]
public float NumberOfCases { get; set; }
[Parameter]
public DateTime Date { get; set; }
[Parameter]
public string Description { get; set; }
}
我的索引页:
@page "/"
@inject IHttpClientFactory _clientFactory;
@if (string.IsNullOrWhiteSpace(errorString) == false)
{
<div class="h2">@errorString</div>
}
else if (coronaModel is null)
{
<div class="h2">Loading...</div>
}
else
{
<div class="container-fluid">
<div class="row">
<div class="col">
<Cards NumberOfCases="@coronaModel.confirmed.value" Date="@coronaModel.lastUpdate" Description="Number of active COVID-19 cases" Title="Infected" />
</div>
<div class="col">
<Cards NumberOfCases="@coronaModel.recovered.value" Date="@coronaModel.lastUpdate" Description="Number recovered COVID-19 cases" Title="Recovered" />
</div>
<div class="col">
<Cards NumberOfCases="@coronaModel.deaths.value" Date="@coronaModel.lastUpdate" Description="Number of COVID-19 deaths" Title="Deaths" />
</div>
</div>
</div>
}
@code{
CoronaModel coronaModel;
string errorString;
protected override async Task OnInitializedAsync()
{
var request = new HttpRequestMessage(HttpMethod.Get, "https://covid19.mathdro.id/api");
var client = _clientFactory.CreateClient();
HttpResponseMessage response = await client.SendAsync(request);
if (response.IsSuccessStatusCode)
{
coronaModel = await response.Content.ReadFromJsonAsync<CoronaModel>();
errorString = null;
}
else
{
errorString = "There was an error getting the data.";
}
}
}
有什么办法可以解决吗?如果是,我将非常感谢您的帮助!
谢谢!
您应该在启动时将IHttpClientFactory
服务添加到DI容器中class。 IHttpClientFactory
可以像这样调用 AddHttpClient 来注册:
public void ConfigureServices(IServiceCollection services)
{
services.AddHttpClient();
//..................
}
我正在使用这个 api 创建这个 Corona 应用:https://covid19.mathdro.id/api. I have created a component for cards to show the data from the api, and when i am running the app it gives me this error:
我正在使用 System.Net.Http.Json。
这是我的模型:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
namespace CoronaAppCsarp.Data
{
public class CoronaModel
{
public Confirmed confirmed { get; set; }
public Recovered recovered { get; set; }
public Deaths deaths { get; set; }
public string dailySummary { get; set; }
public string image { get; set; }
public DateTime lastUpdate { get; set; }
}
public class Confirmed
{
public int value { get; set; }
public string detail { get; set; }
}
public class Recovered
{
public int value { get; set; }
public string detail { get; set; }
}
public class Deaths
{
public int value { get; set; }
public string detail { get; set; }
}
}
我的卡片组件:
<div class="card" style="width: 18rem;">
<div class="card-body">
<h5 class="card-title">@Title</h5>
<p class="card-text">@NumberOfCases</p>
<p class="card-text">@Date</p>
<p class="card-text">@Description.</p>
</div>
</div>
@code {
[Parameter]
public string Title { get; set; }
[Parameter]
public float NumberOfCases { get; set; }
[Parameter]
public DateTime Date { get; set; }
[Parameter]
public string Description { get; set; }
}
我的索引页:
@page "/"
@inject IHttpClientFactory _clientFactory;
@if (string.IsNullOrWhiteSpace(errorString) == false)
{
<div class="h2">@errorString</div>
}
else if (coronaModel is null)
{
<div class="h2">Loading...</div>
}
else
{
<div class="container-fluid">
<div class="row">
<div class="col">
<Cards NumberOfCases="@coronaModel.confirmed.value" Date="@coronaModel.lastUpdate" Description="Number of active COVID-19 cases" Title="Infected" />
</div>
<div class="col">
<Cards NumberOfCases="@coronaModel.recovered.value" Date="@coronaModel.lastUpdate" Description="Number recovered COVID-19 cases" Title="Recovered" />
</div>
<div class="col">
<Cards NumberOfCases="@coronaModel.deaths.value" Date="@coronaModel.lastUpdate" Description="Number of COVID-19 deaths" Title="Deaths" />
</div>
</div>
</div>
}
@code{
CoronaModel coronaModel;
string errorString;
protected override async Task OnInitializedAsync()
{
var request = new HttpRequestMessage(HttpMethod.Get, "https://covid19.mathdro.id/api");
var client = _clientFactory.CreateClient();
HttpResponseMessage response = await client.SendAsync(request);
if (response.IsSuccessStatusCode)
{
coronaModel = await response.Content.ReadFromJsonAsync<CoronaModel>();
errorString = null;
}
else
{
errorString = "There was an error getting the data.";
}
}
}
有什么办法可以解决吗?如果是,我将非常感谢您的帮助!
谢谢!
您应该在启动时将IHttpClientFactory
服务添加到DI容器中class。 IHttpClientFactory
可以像这样调用 AddHttpClient 来注册:
public void ConfigureServices(IServiceCollection services)
{
services.AddHttpClient();
//..................
}