Дочерние элементы вызова API Blazor Webassembly не могут быть оценены

Я пытаюсь вызвать существующий API для отдыха, который у меня есть с моим новым приложением Blazor Webassembly, однако, когда я вызываю, я всегда получаю сообщение об ошибке Не удалось оценить дочерние элементы. API попадает в точку останова, и когда я перехожу через него, он успешно возвращает данные, которые я также могу видеть, вызываю ли я его в почтальоне, однако вызов Blazor терпит неудачу. Я подумал, что, возможно, это проблема несоответствия классов, однако структура классов для TeamModel идентична, поскольку теперь это общий ресурс. Я новичок в Blazor, и я уверен, что что-то упустил, но мог бы что-то сделать с помощью какого-либо направления или помощи.

private async Task FetchTeamData()
{
        try
        {
            List<TeamModel> teams;
            teams = await Http.GetFromJsonAsync<List<TeamModel>>("http://localhost:50663/api/team");
        }
        catch (Exception ex)
        {
            //Always blowing up with Children could not be evaluated here.
        }
}
[HttpGet]
public IActionResult GetAllTeams()
{
    List<TeamModel> teams = _teamRepository.GetAllTeams();

    return Ok(teams);
}

Изменить: Ну, я сузил его до того, что что-то не так с тем, как проект читает этот API. Я могу нормально назвать другие размещенные API. Я не уверен, что это из-за его localhost или какой-то другой проблемы, но ни один из методов API localhost не будет вызывать должным образом, я всегда получаю от него один и тот же ответ.


person sm.th    schedule 20.07.2020    source источник
comment
хм, странно, я ожидал, что это сработает. не могли бы вы попробовать получить TeamModel в виде массива? так же, как GetFromJsonAsync<TeamModel[]>, чтобы избежать нарушения кода, вы можете просто добавить .ToList()   -  person Patrick Beynio    schedule 20.07.2020
comment
Я уже пробовал это, у меня были те же мысли, что и в примерах, которые я нашел в Интернете, но в конечном итоге с тем же результатом. Даже если я просто возьму JSON в виде строки, это даст мне ту же ошибку.   -  person sm.th    schedule 21.07.2020


Ответы (1)


Я столкнулся с той же проблемой, это проблема CORS. Просто добавьте в startup.cs вашего сервера API что-то вроде этого

app.UseCors(policy => 
    policy.WithOrigins("http://localhost:5000", "https://localhost:5001")
    .AllowAnyMethod()
    .WithHeaders(HeaderNames.ContentType));

Источник: https://github.com/dotnet/AspNetCore.Docs/blob/master/aspnetcore/blazor/common/samples/3.x/BlazorWebAssemblySample/Pages/CallWebAPI.razor

person Sascha    schedule 22.07.2020