Не удалось найти разрешение ошибки. Сервис Httpclient не зарегистрирован. - PullRequest
0 голосов
/ 11 октября 2019

Я обнаружил Blazor на прошлой неделе, и сама идея этого увлекательна для меня. Мне действительно нравится, как это структура или, по крайней мере, то, что я выглядел так далеко, я думаю, что я понял большую часть того, что я прочитал, такЯ решил сделать небольшой Rss Reader в качестве первого тестового демонстрационного приложения, я в основном основывал его на этом уроке, но только на минимальной функциональной способности, такой как получение только одного типа поста вместо всех предложенных в уроке, пост был сделан последнимгод, так что, конечно, это не будет ситуация копирования и вставки, после нескольких дней чтения на Blazor я начинаю, но сталкиваюсь со странной ошибкой, и 2 дня поиска в Google еще не помогли мне решить ее, я надеялся, что кто-нибудьможет здесь, извините, если моя грамматика не самая лучшая, я очень хорошо это знаю :) Надеюсь, это понятно. enter image description hereenter image description here

enter image description here

@page "/latestposts"
@using Projectname.Shared.Models
@using System.Net.Http;
@inject HttpClient Http

<h4>C# Corner Latest Posts</h4>

@if (feeds == null)
{
    <p><em>Loading...</em></p>
}
else
{
    counter = 0;
    <table class='table'>
        <thead>
            <tr>
                <th>Sl.No.</th>
                <th>Post Title (With Link)</th>
                <th>Post Type</th>
                <th>Content</th>
                <th>Publish Date</th>
                <th>Author</th>
            </tr>
        </thead>
        <tbody>
            @foreach (var feed in feeds)
            {
                counter++;
                <tr>
                    <td>@counter</td>
                    <td><NavLink href=@feed.Link target="_blank">@feed.Title</NavLink></td>
                    <td>@feed.FeedType</td>
                    <td>@feed.Content</td>
                    <td>@feed.PublishDate</td>
                    <td>@feed.Author</td>
                </tr>
            }
        </tbody>
    </table>
}
@functions {
    Feed[] feeds;
    int counter;

    protected override async Task OnInitializedAsync()
    {
        feeds = null;
        feeds = await Http.GetJsonAsync<Feed[]>("/api/feeds/latestposts");
    }

}    

1 Ответ

0 голосов
/ 11 октября 2019

HttpClient вводится из коробки на размещенном блейзоре. На стороне сервера вам не нужны запросы Rest, потому что бэкэнд находится в том же месте, что и frond end. Достаточно просто вызвать локальную функцию.

В любом случае, если вам нужен Http-клиент, например, для перехода на другой сайт, я предлагаю вам использовать IHttpClientFactory:

Базовое использование:

  1. Добавить в услуги:

    services.AddHttpClient();
    
  2. Получить от DI:

    @inject IHttpClientFactory clientFactory
    
  3. Сделать запрос:

    var client = _clientFactory.CreateClient();
    
    var response = await client.SendAsync(request);
    
    if (response.IsSuccessStatusCode)
    {
        Branches = await response.Content
            .ReadAsAsync<IEnumerable<GitHubBranch>>();
    }
    else
    {
        GetBranchesError = true;
        Branches = Array.Empty<GitHubBranch>();
    }         
    

Это Даниэль Рот (менеджер по продукции Blazor) говорит об этой проблеме :

На сервере IHttpClientFactory предоставляет ряд преимуществ для выполнения общих HTTP-запросов, которые изложены здесь: https://docs.microsoft.com/aspnet/core/fundamentals/http-requests.

HttpClient, предоставляемый для Blazor WebAssembly Apps, немного более специализирован и специально настроен для выполнения запросовобратно на сервер происхождения.

Конечно, вы также можете использовать HttpClient, добавляя его к сервисам через DI:

services.AddScoped<HttpClient>();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...