System.PlatformNotSupportedException: operation is not supported on this platform

Логика такая: есть сервис, который делает следующее: делает запрос к апи, получает информацию и записывает в свойства. Затем эти свойства используются в разметке Blazor-компонента.

Сам сервис:

public class TmdbService
{
    private static JsonConfig _config = new JsonConfig();
    private readonly TMDbClient _client = new TMDbClient(_config.Settings.TApiKey);

    public async Task GetAllMovieInfo(string title, string lang = "ru")
    {
        SearchContainer<SearchMovie> results = await _client.SearchMovieAsync(title, lang);
        var movieData = results.Results.Take(1);
        foreach(var data in movieData)
        {
            new MovieDataDetail
            {
               Id = data.Id,
               Title = data.Title,
               OriginalTitle = data.OriginalTitle,
               ReleaseDate = data.ReleaseDate,
               Image = data.PosterPath,
               Popularity = data.Popularity,
               Overview = data.Overview
            } 
        }
    }
}

А вот компонент, в котором я все это вызываю:

@page "/counter"
@using MovieApp.Shared.Services.TmdbApi
@using MovieApp.Shared.Models.MovieData

<div>
    <h1>The name of the movie: @detail.OriginalTitle</h1>
    <h1>The overview of the @title: @detail.Overview</h1>
    @*<h1>Ratings: @detail.IMDbRating</h1>*@
</div>

@code {
    TmdbService service;
    MovieDataDetail detail;
    string title = "lucy";

    protected override Task OnInitializedAsync()
    {
        detail = new MovieDataDetail();
        service = new TmdbService();
        return service.GetAllMovieInfo(title);
    }
}

Сервис работает, я проверял на обычном консольном приложении. Метод OnInitializedAsync() срабатывает во время первой загрузки страницы, по идее все должно работать, студия не ругается, но в консоли браузера, я получаю:


Ответы (1 шт):

Автор решения: 4per

Вот в чём дело. В коде конструктора TMDbClient вызывается конструктор какого-то вспомогательного класса RestClient

public RestClient(Uri baseUrl, JsonSerializer serializer, IWebProxy proxy = null)
{
    BaseUrl = baseUrl;
    Serializer = serializer;
    DefaultQueryString = new List<KeyValuePair<string, string>>();

    MaxRetryCount = 0;
    Proxy = proxy;

    HttpClient = new HttpClient(new HttpClientHandler
    {
        Proxy = proxy // <<<<< Бомба
    });
}

Туда, в вашем случае, параметру proxy явно передаётся значение null. Но Microsoft пометил свойство HttpClientHandler.Proxy как недопустимое для платформы browser

[UnsupportedOSPlatform("browser")]
public IWebProxy? Proxy
{
    get => _underlyingHandler.Proxy;
    set => _underlyingHandler.Proxy = value;
}

Поэтому даже присвоение null в это свойство даёт исключение. Проще всего решить это изменив код RestClient

public RestClient(Uri baseUrl, JsonSerializer serializer, IWebProxy proxy = null)
{
    BaseUrl = baseUrl;
    Serializer = serializer;
    DefaultQueryString = new List<KeyValuePair<string, string>>();

    MaxRetryCount = 0;
    Proxy = proxy;

    var httpClientHandler = new HttpClientHandler;
    if (proxy != null)
    {
        httpClientHandler.Proxy = proxy;
    }
    HttpClient = new HttpClient(httpClientHandler);
}

Вы можете сделать форк, завести ышу, предложить пиар. Если пиар не примут, придётся пользоваться своим форком. Но причин не принять не вижу.

→ Ссылка