在xUnit 2.2和之前的版本中,我们能够在实现Theory时将日期字符串作为内联数据传递.
[Theory]
[InlineData("title 1", "testing 1", 1, "Educational", "2017-3-1", "2018-12-31")]
[InlineData("title 2", "testing 2", 2, "Self Employment", "2017-2-1", "2018-2-28")]
public async Task WhenPassingCorrectData_SuccessfullyCreate(
string title,
string description,
int categoryId,
string category,
DateTime startDate,
DateTime endDate)
{
}
Run Code Online (Sandbox Code Playgroud)
但随着2.3更新,这似乎被打破,Visual Studio正在给出一个编译错误.
该值不能转换为类型为'System.DateTime的方法参数'startDate'
有没有人得到另一个解决方法,必须接收日期作为字符串并将其转换为测试方法?
这将是这个版本中的临时错误,将在未来版本中修复吗?
PS:我在VS2017上的.netcore项目中使用xUnit
在我们的 .NET Core Web API 中,我们已经配置了基于声明的授权并且它完美地工作。我们创建了角色声明并将角色分配给用户。我们不使用用户声明。
现在我有一个要求让用户有一个特定的要求。在 UserManager 中有一个方法 GetUsersByClaimAsync(Claim),它似乎只考虑用户声明。不是角色声明。所以在我的情况下,它不可用。
所以我想通过声明获取角色,然后通过角色获取用户(效率不高,因为它必须进行多次数据库调用才能分别获取每个角色的用户)。但即使这样做,也没有直接的方法可以通过 UserManager 或 RoleManager 中的声明来获取角色。
所以对我来说,除了自定义查询之外,似乎没有干净的方法可以实现这一点。
我不确定我在这里遗漏了什么。有没有人使用更好的方法实现了这一目标?
谢谢
c# claims-based-identity asp.net-identity asp.net-core claims-authentication
我们尝试在一个具有 .Net Core Web API 和 Reactjs SPA 的项目中实现与 Apple 的社交登录。由于响应类型和响应模式的限制,从前端我们只能在登录成功后从苹果获取授权码。
我们可以使用以下逻辑在后端验证此授权码。另外,在响应中,它包含 id_token,我们可以在其中访问一些其他信息,但不能访问电子邮件。我们计划做的是,如果授权代码有效并且存在具有相同电子邮件的用户(电子邮件是用户名),它将对用户进行身份验证并根据已使用实现的内置身份验证/授权引擎返回身份验证 JWT 令牌asp.net core 身份框架。
var clientSecret = CreateJwtToken();
var data = new Dictionary<string, string>
{
{ "client_id" , "xxx.xxxxx.com" },
{ "code" , authCode },
{ "scope" , "email" },
{ "grant_type" , "authorization_code" },
{ "redirect_uri", "http://6c52b7b4xx.ngrok.io/login/apple" },
{ "client_secret", clientSecret }
};
var formdata = new FormUrlEncodedContent(data);
var res = await client.PostAsync("https://appleid.apple.com/auth/token", formdata);
var authToken = await res.Content.ReadAsStringAsync();
var responseJSON = JObject.Parse(authToken);
var id_token = …Run Code Online (Sandbox Code Playgroud) 据我所知,当四舍五入为5时,四舍五入应按以下方式进行。
2.435 => 2.44 (Round Up, if rounding to digit(3) is odd number)
2.445 => 2.44 (Round Down, if rounding to digit(4) is even number)
Run Code Online (Sandbox Code Playgroud)
如果我们做所有的总结,
2.435 + 2.445 = 4.88
2.44 + 2.44 = 4.88
Run Code Online (Sandbox Code Playgroud)
我很确定在.Net中也可以进行这种四舍五入。
但是在SQL Server中,总会四舍五入,这在数学上是不正确的。
SELECT round(2.345, 2) = 2.35
SELECT round(2.335, 2) => 2.34
Run Code Online (Sandbox Code Playgroud)
这导致四舍五入后的总值相差1美分。
2.345 + 2.335 = 4.68
2.35 + 2.34 = 4.69 => which is not correct
Run Code Online (Sandbox Code Playgroud)
我已经尝试过使用十进制和货币数据类型。
难道我做错了什么?有没有解决的办法?
在我的Asp.Net核心web api中,我使用Identity与Jwt承载认证.它没有任何大惊小怪,工作顺利.这是代码,
ConfigureServices():
services.AddIdentity<ApplicationUser, IdentityRole<int>>()
.AddEntityFrameworkStores<DataContext, int>()
.AddDefaultTokenProviders();
Run Code Online (Sandbox Code Playgroud)
配置():
app.UseJwtBearerAuthentication(new JwtBearerOptions()
{
AutomaticAuthenticate = true,
AutomaticChallenge = true,
TokenValidationParameters = new TokenValidationParameters()
{
ValidIssuer = "localhost:4200",
ValidAudience = "localhost:4200",
ValidateIssuerSigningKey = true,
IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes("SuperSecretKey_GetThisFromAppSettings")),
ValidateLifetime = true
}
});
Run Code Online (Sandbox Code Playgroud)
今天我升级到.net core 2.0和整个技术堆栈.从有限的帮助中我可以修改这样的代码..
ConfigureServices()
services.AddIdentity<ApplicationUser, ApplicationRole>()
.AddEntityFrameworkStores<DataContext>()
.AddDefaultTokenProviders();
services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
.AddJwtBearer(options =>
{
options.Authority = "localhost:4200";
options.Audience = "localhost:4200";
options.RequireHttpsMetadata = false;
options.TokenValidationParameters = new TokenValidationParameters()
{
ValidateIssuerSigningKey = true,
ValidateIssuer = true,
ValidateLifetime = true,
ValidIssuer = "localhost:4200",
IssuerSigningKey …Run Code Online (Sandbox Code Playgroud) 在我们的 ASP.Net Core Web API 中,我们曾经Hosted Services执行过一些后台任务。有时这些后台任务可能需要很长时间才能完成(大约一个小时)。除非有长时间运行的任务,否则一切都可以无缝运行。
IIS 应用程序池的空闲超时默认值为 20 分钟。因此,当 20 分钟内没有请求时,IIS 会重新启动应用程序池。但有时后台任务可能会运行并且 IIS 重新启动,而不管它是否会导致任务突然终止而没有将其标记为完成。一旦 IIS 启动,托管服务启动处理就会再次选取任务。但在完成之前,IIS 会重新启动,并且这种情况可能会一直持续下去。当存在可能多次发送相同电子邮件的电子邮件发送任务时,这可能会导致许多问题。
由于托管服务是 ASP.NET Core 的一等公民,如果 IIS 在执行空闲超时时也考虑后台执行,那将是理想的。
现在我们通过将空闲超时设置为 0 来解决这个问题,这样它就永远不会超时。这是一种hacky解决方案。此外,在节点动态添加和删除的负载平衡环境中,这不是一个可行的选择。
有没有更好的方法来“防止 IIS 在后台执行过程中重新启动”?
谢谢
asp.net iis .net-core asp.net-core asp.net-core-hosted-services
asp.net-core ×3
asp.net ×2
.net-core ×1
asp.net-core-hosted-services ×1
c# ×1
iis ×1
jwt ×1
oauth-2.0 ×1
sql ×1
sql-server ×1
xunit ×1
xunit.net ×1