正在从blazor页面传递UserId



我是blazor的新手,所以对我温柔一点:(。在我的应用程序中,有一个按钮可以向服务器发送POST请求。被调用的端点做了很多事情,但我需要获得当前登录用户的Id。所以我把它和请求一起传递。每次请求的结果都是System.Threading.Tasks.Task`1[System.String]。我不知道我做错了什么。我知道这与我的方法异步有关,但经过几个小时的尝试和错误,我很无助。

有人知道我为什么得到错误的值吗?还有什么更好的方法来传递用户的Id吗?我觉得我的解决方案不理想。

非常感谢!

我的剃须刀是:

@page "/Overview"
<AuthorizeView>
<Authorized>
<div class="btn btn-warning btn-sm" style="border-color:black" @onclick="SyncTrades">Sync trades</div>
</Authorized>
<NotAuthorized>
You are not signed in. Please sign in.
</NotAuthorized>
</AuthorizeView>
@using BlazorPro.Spinkit
@using System.Net.Http.Json
@inject HttpClient Http
@using System.Security.Claims
@using Microsoft.AspNetCore.Components.Authorization
@inject AuthenticationStateProvider AuthenticationStateProvider

@code {
protected async Task SyncTrades()
{
var userId = GetUserId().ToString();
await Http.PostAsync("https://localhost:44366/api/SyncTrades/" + userId, new StringContent(""));
}
private string _authMessage;
private string _surnameMessage;
private IEnumerable<Claim> _claims = Enumerable.Empty<Claim>();
private async Task<string> GetUserId()
{
var authState = await AuthenticationStateProvider.GetAuthenticationStateAsync();
var user = authState.User;
return user.Claims.FirstOrDefault().Value;
}
}

我的控制器张贴方法

// POST api/<SyncTradesController>
[HttpPost("{UserId}")]
//public void Post([FromRoute]string UserId)
public async Task Post([FromRoute] string UserId)
{
DoStuff();
}

您应该awaitGetUserId()调用,因为它是一个异步方法:

protected async Task SyncTrades()
{
var userId = await GetUserId(); //.ToString() is redundant here
await Http.PostAsync("https://localhost:44366/api/SyncTrades/" + userId, new StringContent(""));
}

为了清楚起见,建议用Async->后缀Task(或Task<T>(返回方法;GetUserIdAsync()

一个(更好的(替代方案是通过标头传递UserId。有多种选择,但那是另一个世界!

关于认证;你可以从这里开始阅读:https://learn.microsoft.com/en-us/aspnet/core/blazor/security/?view=aspnetcore-5.0#blazor服务器认证

相关内容

  • 没有找到相关文章

最新更新