gpt4 book ai didi

asp.net-core - 找不到类型或命名空间 SigninManager<> Identity 3.1.1 Mediatr 8.0.0

转载 作者:行者123 更新时间:2023-12-02 19:40:36 25 4
gpt4 key购买 nike

我正在尝试使用 Mediatr 库和模式来实现 Identity...

我使用的代码在 dotnetcore 2.x 和 identity 2.2 中确实有效,但在 dotnetcore 3.x 和 identity 3.1.1 中被破坏了...

我的应用程序类库是 netstandard2.1 并设置了以下依赖项。

<PackageReference Include="FluentValidation.AspNetCore" Version="8.6.1" />
<PackageReference Include="MediatR.Extensions.Microsoft.DependencyInjection" Version="8.0.0" />
<PackageReference Include="Microsoft.AspNetCore.Identity.EntityFrameworkCore" Version="3.1.1" />

我有这样的请求处理程序;

public class Handler : IRequestHandler<Query, AppUser>
{
private readonly UserManager<AppUser> _userManager;
private readonly SignInManager<AppUser> _signInManager;

public Handler(UserManager<AppUser> userManager, SignInManager<AppUser> signInManager)
{
_userManager = userManager;
_signInManager = signInManager;
}

public async Task<AppUser> Handle(Query request, CancellationToken cancellationToken)
{
var user = await _userManager.FindByEmailAsync(request.Email);

if (user == null)
{
throw new Exception("Unauthorized");
}

// var result = await _signInManager.CheckPasswordSignInAsync(user, request.Password, false);
var result = await _userManager.CheckPasswordAsync(user, request.Password);

if (result)
{
return user;
}

throw new Exception("Unauthorized");
}
}

我在这里遇到的问题是我无法再解析 SignInManager,我不确定为什么。我也找不到太多关于身份版本之间的任何重大变化的信息。SignInManager 去哪儿了?我认为 UserManager 在同一个命名空间中并且 UserManager 解析得很好。如您所见,我现在非常困惑,我正准备用欺骗手段脱身,但我不适应。

在我的 API 项目中使用相同的依赖项,我可以使用相同的命名空间引用 SignInManager,并且我可以使用它直接在 Controller 中登录。我如何将其分离到 Mediatr 处理程序中?

最佳答案

从 3.0 版开始,ASP.NET Core 不再通过 NuGet 完全分发。相反,它作为 .NET Core 运行时的一部分作为 共享框架 提供。只有可选包,如 Microsoft.AspNetCore.Identity.EntityFrameworkCore 仍然通过 NuGet 分发。但是,这些包没有定义将自动工作的 transient 依赖项,因此您仍然需要正确引用此共享框架才能使用这些类型。

为此,您需要将项目切换到目标 netcoreapp3.1,因为 ASP.NET Core 仅在 .NET Core 上运行,不能与 .NET Standard 一起使用。

完成后,您可以使用框架引用 来引用共享框架。所以你的项目文件应该是这样的:

<Project Sdk="Microsoft.NET.Sdk">

<PropertyGroup>
<TargetFramework>netcoreapp3.1</TargetFramework>
</PropertyGroup>

<ItemGroup>
<FrameworkReference Include="Microsoft.AspNetCore.App" />
</ItemGroup>

<ItemGroup>
<PackageReference Include="FluentValidation.AspNetCore" Version="8.6.1" />
<PackageReference Include="MediatR.Extensions.Microsoft.DependencyInjection" Version="8.0.0" />
<PackageReference Include="Microsoft.AspNetCore.Identity.EntityFrameworkCore" Version="3.1.1" />
</ItemGroup>

</Project>

关于asp.net-core - 找不到类型或命名空间 SigninManager<> Identity 3.1.1 Mediatr 8.0.0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60249514/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com