我使用 C# 12。在 C# 12 中我可以使用主构造函数:
public class UserService(IUnitOfWork uow) : IUserService
{
}
Run Code Online (Sandbox Code Playgroud)
在 C# 12 之前,我对构造函数中注入的项使用 null 检查:
public class UserService : IUserService
{
private readonly IUnitOfWork _uow;
public UserService(IUnitOfWork uow)
{
ArgumentNullException.ThrowIfNull(uow);
_uow = uow;
}
}
Run Code Online (Sandbox Code Playgroud)
现在我如何在 C# 12 中进行 null 检查?
是否需要对主构造函数使用快速失败?
我正在使用 ASP.NET Core 5,
我想IWebHostEnvironment在 classlib 中访问,但是当我尝试Microsoft.AspNetCore.App在 nuget 中安装时,我收到此警告:
A PackageReference to Microsoft.AspNetCore.App is not necessary when targeting .NET Core 3.0 or higher
如何IWebHostEnvironment在 .NET 5 classlib 中访问?
我使用 JWT 进行项目身份验证。
我使用 .NET 7,此处显示的代码对我来说可以正常工作。
此代码用于检查数据库中是否存在令牌:
if (!(context.SecurityToken is JwtSecurityToken accessToken) ||
string.IsNullOrWhiteSpace(accessToken.RawData) ||
!await tokenStoreService.IsValidTokenAsync(accessToken.RawData, userId))
{
context.Fail("This token is not in our database.");
return;
}
Run Code Online (Sandbox Code Playgroud)
但是当我将 .NET 版本升级到 8 时,现在这段代码不再起作用。
我搜索了一下,发现这篇文章,我不知道它是否与我的问题相关。
我使用 ASP.NET Core Identity,通过 Jmeter 应用程序,我向我的 Web 应用程序发送多个请求以创建用户,它使用同一电子邮件创建了多个用户,尽管我的RequireUniqueEmail是true
services.AddIdentity<User, Role>(identityOptions =>
{
identityOptions.User.RequireUniqueEmail = true;
});
Run Code Online (Sandbox Code Playgroud)
当我一一发送请求时,一切正常,并在这段代码中给我重复的电子邮件错误
var result = await _userManager.CreateAsync(userToCreate, userPassword);
Run Code Online (Sandbox Code Playgroud)
但是当我使用 Jmeter 发送多个请求时,上面的代码无法处理重复的电子邮件,并且在 Jmeter 请求完成后,我打开 SQL Server,我看到至少创建了 10 条具有相同电子邮件的记录。我搜索了这个问题并得到了这个解决方案Using lock
private static readonly object lockObj = new object();
lock(lockObj)
{
var result = await _userManager.CreateAsync(userToCreate, userPassword);
}
Run Code Online (Sandbox Code Playgroud)
但它给了我错误并说“你不能在锁定语句中使用await”,第二个问题是ASP.NET Core Identity没有用于创建的Sync方法。如何在 ASP.NET Core Identity 中创建 create 的同步方法?
c# multithreading thread-synchronization async-await asp.net-core
我正在使用 NET6 RC。如何在 Visual Studio 2022 预览版的 Nuget 窗口中安装 RC 或预览包?因为目前 Visual Studio 2022 预览中的 Nuget 窗口仅向我显示软件包的稳定版本。例如 :
<PackageReference Include="Microsoft.EntityFrameworkCore" Version="6.0.0-rc.2.21480.5" />
Run Code Online (Sandbox Code Playgroud) c# ×3
.net-8.0 ×2
asp.net-core ×2
.net-6.0 ×1
async-await ×1
c#-12.0 ×1
fail-fast ×1
jwt ×1
nuget ×1