小编Wij*_*tha的帖子

Xunit 2.3.0无法将日期作为内联参数传递

在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

xunit xunit.net

12
推荐指数
4
解决办法
5533
查看次数

.Net Core Identity Framework 通过声明获取用户

在我们的 .NET Core Web API 中,我们已经配置了基于声明的授权并且它完美地工作。我们创建了角色声明并将角色分配给用户。我们不使用用户声明。

现在我有一个要求让用户有一个特定的要求。在 UserManager 中有一个方法 GetUsersByClaimAsync(Claim),它似乎只考虑用户声明。不是角色声明。所以在我的情况下,它不可用。

所以我想通过声明获取角色,然后通过角色获取用户(效率不高,因为它必须进行多次数据库调用才能分别获取每个角色的用户)。但即使这样做,也没有直接的方法可以通过 UserManager 或 RoleManager 中的声明来获取角色。

所以对我来说,除了自定义查询之外,似乎没有干净的方法可以实现这一点。

我不确定我在这里遗漏了什么。有没有人使用更好的方法实现了这一目标?

谢谢

c# claims-based-identity asp.net-identity asp.net-core claims-authentication

7
推荐指数
1
解决办法
987
查看次数

.Net Core Web API 中的 Apple 社交登录 - 如何访问用户的电子邮件

我们尝试在一个具有 .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)

oauth-2.0 asp.net-identity asp.net-core apple-sign-in

5
推荐指数
0
解决办法
1604
查看次数

SQL Server四舍五入问题所在的位置5

据我所知,当四舍五入为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)

我已经尝试过使用十进制和货币数据类型。

难道我做错了什么?有没有解决的办法?

sql sql-server sql-server-2008

4
推荐指数
3
解决办法
9856
查看次数

Dotnet核心2.0使用身份与JwtBearer身份验证

在我的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 jwt asp.net-web-api asp.net-identity .net-core-2.0

4
推荐指数
1
解决办法
2522
查看次数

防止 IIS 在运行后台任务时出现空闲超时

在我们的 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

2
推荐指数
2
解决办法
2291
查看次数