Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/tensorflow/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Blazor服务器应用程序。类中的Windows身份验证?_C#_Blazor - Fatal编程技术网

C# Blazor服务器应用程序。类中的Windows身份验证?

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

我正在使用最新的VS2019Pro和Core 3.1

Blazor ServerApp似乎在.razor页面的@code{}标记中运行实时代码。因此,与使用API来提供数据不同,我认为只创建类和方法来返回数据是很有意义的


我面临的唯一问题是能够在类中使用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;
    }