【发布时间】:2020-01-06 05:39:57
【问题描述】:
我想根据授权更改使我的组件刷新。这是我的组件:
@inject IAuthService AuthService
@implements IDisposable
<AuthorizeView>
<Authorized>
Logged as: @Identity
</Authorized>
<NotAuthorized>
</NotAuthorized>
</AuthorizeView>
@code
{
private string Identity { get; set; }
protected override async Task OnInitializedAsync()
{
AuthService.RefreshRequested += StateHasChanged;
Identity = $"{(await AuthService.GetClaimFromToken("sub"))?.Value} ({(await AuthService.GetClaimFromToken("unique_name"))?.Value})";
}
public void Dispose()
{
AuthService.RefreshRequested -= StateHasChanged;
}
}
这是我服务的一部分:
public class AuthService: IAuthService
{
// ...
public event Action RefreshRequested;
public async Task<RequestResponse> Token(LoginModel loginModel)
{
// some logic
CallRequestRefresh();
return JsonConvert.DeserializeObject<RequestResponse>(result);
}
private void CallRequestRefresh()
{
RefreshRequested?.Invoke();
}
}
Token(...) 方法用于其他组件。我不知道为什么在提到的组件中,StateHasChanged 没有被触发。
我真正想要实现的只是提供一些方法来更新Identity 属性,使用给定的异步方法(GetClaimFromToken)。
【问题讨论】:
-
1.我认为您需要将
AuthService.RefreshRequested += StateHasChanged;放在Identity = $"....";2 之后。此外,您必须确保您的组件就在那里并且当有人调用Token(...)方法时 NOT 被处理 -
@itminus 这是共享组件。在调用
Token(...)时不会释放它
标签: asp.net-core events blazor blazor-client-side