Получение неопределенной ошибки при запуске приложения Blazor - PullRequest
0 голосов
/ 04 мая 2020

Я пытаюсь создать простое веб-приложение в Blazor, которое отображает список игр с использованием таблицы HTML.

Я написал некоторый код, но когда я пытаюсь его запустить, я просто получаю эта ошибка:

An unhandled error has occurred

Я использую API, который возвращает список игр в формате JSON. Я знаю, что API в порядке, потому что он отлично работает, когда я тестировал его с помощью Postman.

Вот мой код:

var gamesList= await Http.GetFromJsonAsync<GameData[]>("http://1.1.1.1/api/gamedata");


<table>
    <th>Games</th>
            @foreach (var game in gamesList)
            {
                <tr>
                    <td>@game.Title</td>
                    <td>@game.Genre</td>
                    <td>@game.Price</td>
                </tr>
            }
</table>

Могу ли я что-то делать не так?

Спасибо!

1 Ответ

3 голосов
/ 04 мая 2020

Ваш код должен выглядеть примерно так:

@inject HttpClient Http


@if (gamesList == null)
{
   <p><em>Loading...</em></p>
}
else
{
    <table class="table">
       <thead>
         <tr>
            <th>Title</th>
            <th>Genre</th>
            <th>Price</th>
        </tr>
       </thead>
       <tbody>
        @foreach (var game in gamesList)
        {
            <tr>
                <td>@game.Title</td>
                <td>@game.Genre</td>
                <td>@game.Price</td>
            </tr>
        }
      </tbody>
   </table>
 }

 @code {
    private GameData[] gamesList;

    protected override async Task OnInitializedAsync()
   {

      gamesList = await Http.GetFromJsonAsync<GameData[]> 
          ("gamedata");

    }

}

Также убедитесь, что этот код есть в вашей программе. Основной метод:

  var builder = WebAssemblyHostBuilder.CreateDefault(args);
  builder.RootComponents.Add<App>("app");

  builder.Services.AddTransient(sp => new HttpClient { BaseAddress = 
               new Uri(builder.HostEnvironment.BaseAddress) });

  await builder.Build().RunAsync();

Примечание. быть несколько причин этой ошибки. Я склонен полагать, что это связано с тем, что не проверяется, имеет ли значение gamesList значение null, как это происходит при визуализации таблицы. Важно понимать, что когда вы вызываете метод OnInitialisedAsyn c, управление передается вызывающему коду (каркасу), который начинает визуализацию таблицы до того, как ваш метод asyn c возвращается, что означает, что gamesList все еще равен нулю, вызывая исключение.

Надеюсь, это работает ...

...