C# Blazor服务器应用程序。类中的Windows身份验证?
我正在使用最新的VS2019Pro和Core 3.1 Blazor ServerApp似乎在.razor页面的@code{}标记中运行实时代码。因此,与使用API来提供数据不同,我认为只创建类和方法来返回数据是很有意义的C# Blazor服务器应用程序。类中的Windows身份验证?,c#,blazor,C#,Blazor,我正在使用最新的VS2019Pro和Core 3.1 Blazor ServerApp似乎在.razor页面的@code{}标记中运行实时代码。因此,与使用API来提供数据不同,我认为只创建类和方法来返回数据是很有意义的 我面临的唯一问题是能够在类中使用User.Identity.Name。通常这在.razor页面和控制器中提供,没有问题,但是我如何(如果可能的话)在类中使用相同的User.Identity.Name属性?您可以使用标准的.net核心身份验证: 基本上你定义了一个: [Casca
我面临的唯一问题是能够在类中使用User.Identity.Name。通常这在.razor页面和控制器中提供,没有问题,但是我如何(如果可能的话)在类中使用相同的User.Identity.Name属性?您可以使用标准的.net核心身份验证: 基本上你定义了一个:
[CascadingParameter] private Task<AuthenticationState> authenticationStateTask { get; set; }
编辑-----
像这样的东西
基本组件:
[CascadingParameter] private Task<AuthenticationState> authenticationStateTask { get; set; }
public String Username {get;set;}
protected override async Task OnInitializedAsync(){
Username = (await authenticationStateTask).User.Identity.Name;
}
IMyRoleManager\u myrolemanger;
私有AuthenticationStateProvider\u AuthenticationStateProvider;
公共MyRepository(IMyRoleManager myRoleManager、AuthenticationStateProvider authentication)
{
_myRoleManager=myRoleManager;
_authenticationStateProvider=身份验证;
}
公共异步任务AddRoleToUser(字符串角色)
{
var id=await GetUserIdFromAuthenticationStateProviderAsync();
var result=await\u myRoleManager.setrolefourser(角色,id);
返回结果;
}
在启动文件中,services.xxx(identity services)必须有正确的条目。嘿,米尔尼,我在authState变量上将一个无对象设置为reference error。所有这些代码都在一个类中,对吗?@Izacch-很抱歉我遗漏了一点,您还需要使用[CascadingParameter]属性来装饰任务。这是因为它是由更高级别的组件传递的。现在看编辑过的代码嘿,我仍然得到同样的异常。我是否错误地认为我可以在.cs文件中使用上述代码示例?我是从一个razor页面调用这个方法的——不,你需要在Blazor文件中包含这个任务——然后,当你调用它时,你会将用户名传递给另一个.cs文件。无论如何,这是您应该做的事情,这样您就可以轻松地对您的另一个进行单元测试component@Izacch用您尝试的内容更新您的问题?看看我的编辑-类似的东西?
[CascadingParameter] private Task<AuthenticationState> authenticationStateTask { get; set; }
public String Username {get;set;}
protected override async Task OnInitializedAsync(){
Username = (await authenticationStateTask).User.Identity.Name;
}
@inherits BaseCompomnent
@Username
IMyRoleManager _myRoleManager;
private AuthenticationStateProvider _authenticationStateProvider;
public MyRepository(IMyRoleManager myRoleManager, AuthenticationStateProvider authentication)
{
_myRoleManager = myRoleManager;
_authenticationStateProvider = authentication;
}
public async Task<bool> AddRoleToUser(string role)
{
var id = await GetUserIdFromAuthenticationStateProviderAsync();
var result = await _myRoleManager.SetRoleForUser(role, id);
return result;
}