Вызов асинхронных методов в представлении Blazor - PullRequest
0 голосов
/ 13 октября 2019

У меня есть серверный клиент на стороне сервера, и я пытаюсь изменить страницу бритвы MainLayout, выполнив проверку входа в систему. В настоящее время я использую Blazored для сохранения локального хранилища, и в настоящее время я использую, чтобы увидеть, сохранен ли токен, чтобы увидеть, вошел ли пользователь в систему, однако я не уверен, как я перевожу это в операторе if на странице бритвы, потому что этохочет асинхронный метод.

Моя проверка входа в систему довольно проста, как показано ниже.

public async Task<bool> IsLoggedIn()
{
    return await m_localStorage.ContainKeyAsync("token").ConfigureAwait(false);
}

На моей странице Razor я делаю эту проверку утверждения - что очевидно не работает, так как нетмодификатор async

@if (!await AppState.IsLoggedIn()) //Requires async modifier
{
    <a href="Login" target="_blank">Login</a>
}

Я также пытался сделать это, используя свойство .Result, но это приводит к исключению: (System.AggregateException: 'Информация: выполнил неявный метод-обработчик, возвратил результат Microsoft. AspNetC) с внутренним исключением -> NullReferenceException: ссылка на объект не установлена ​​для экземпляра объекта.

Но из того, что я вижу, AppState вводится правильно, и локальное хранилище, похоже, правильно вводится в AppState.

@if (!AppState.IsLoggedIn().Result)
{
    <a href="Login" target="_blank">Login</a>
}

Так что мой вопрос в том, как правильно подойти к этому,Есть ли способ выполнить асинхронные методы на страницах бритвы?

1 Ответ

1 голос
/ 13 октября 2019

есть ли способ выполнить асинхронные методы на страницах бритвы?

Нет, в компоненте Razor нет способа использовать await. Это связано с тем, что вы не можете выполнять асинхронную работу как часть рендеринга компонента.

Кстати, механизм локального хранения, предоставляемый командой Blazor, поддерживает защиту данных и рекомендуется для использования Стивом Сандерсоном.

Примечание. Методы асинхронного жизненного цикла компонента - это место, где выполняется асинхронная работа, и, таким образом, вы можете соответствующим образом спроектировать свой код, например, вызвав AppState.IsLoggedIn () из OnInitializedAsync и присвоив возвращаемое значениелокальная переменная, доступ к которой можно получить из ваших представлений.

...