服务器端Blazor不提供HttpClient进行注入

时间:2019-03-18 11:24:36

标签: .net inject blazor-server-side

当我尝试注入HttpClient时,剃须刀页面出现错误:

  

未处理的承诺拒绝:错误:System.InvalidOperationException:   无法为type的属性“ Http”提供值。没有   类型为“ System.Net.Http.HttpClient”的注册服务。

请仔细检查并提供反馈。

2 个答案:

答案 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

对我有用.. =)