将软件包Microsoft.AspNetCore.Authentication.JwtBearer从版本 3.1.14 更新到 6.0.1 后,身份验证请求失败,并显示 401 Unauthorized invalid token。
新的软件包版本需要更改哪些内容?
通常,F#不允许模式变量在同一模式中出现两次.但是在下面的代码中,F#没有抱怨 - 这是一个错误吗?
type foo = { A: int }
let test (x, {A = x}) = x
let result = test ("bla", {A = 3})
Run Code Online (Sandbox Code Playgroud) 是否可以在discrimated union类型声明中使用活动模式?
更准确地说,请考虑以下玩具示例:
type T =
| A of int
| B
let (|Negative|_|) t =
match t with
| A n when n < 0 -> Some ()
| _ -> None
let T_ToString = function
| Negative () -> "negative!"
| _ -> "foo!"
Run Code Online (Sandbox Code Playgroud)
现在假设我想覆盖T中的ToString().在T的类型声明中,我不能引用T_ToString,因为T_ToString尚未在那时声明.我无法在ToString()之前移动活动模式和T_ToString,因为此时尚未声明T.但这也不起作用:
type T =
| A of int
| B
static member (|Negative|_|) t =
match t with
| A n when n < 0 -> Some ()
| _ -> None
override this.ToString …Run Code Online (Sandbox Code Playgroud) 这个问题与DocumentClientfrom Microsoft.Azure.DocumentDB.Core v2.11.2. (更新:该错误也存在于Microsoft.Azure.Cosmos.)
当查询包含DateTime带有尾随零的值时,Cosmos DB 的 LINQ 提供程序中似乎存在错误。考虑以下代码:
string dateTimeWithTrailingZero = "2000-01-01T00:00:00.1234560Z"; // trailing zero will be truncated by LINQ provider :-(
DateTime datetime = DateTime.Parse(dateTimeWithTrailingZero, CultureInfo.InvariantCulture, DateTimeStyles.AdjustToUniversal);
IQueryable<Dictionary<string, object>> query =
client.CreateDocumentQuery<Dictionary<string, object>>(collectionUri)
.Where(x => (DateTime) x["datetime"] <= datetime);
Run Code Online (Sandbox Code Playgroud)
结果query 包括属性所在的文档,datetime例如"2000-01-01T00:00:00.1234567Z"(即使它不应该)。
结果query并没有包含文件,其中datetime是"2000-01-01T00:00:00.1234560Z"(即使它应该)。
有什么方法可以使用DocumentClientLINQ 来DateTime正确查询属性吗?(我知道使用原始 SQL 是有效的 - 由于各种原因,我必须 …
我正在寻找一种可靠的方法来检查 C# 中给定的 SQL 连接字符串是否显式指定了某个参数,例如“ Encrypt=...”。我尝试使用 解析字符串SqlConnectionStringBuilder,期望它能ContainsKey()告诉我是否指定了某个键,但它不起作用:
System.Data.SqlClient.SqlConnectionStringBuilder x =
new("Data Source=.;Initial Catalog=myDb;Integrated Security=True");
bool encryptSpecified = x.ContainsKey("Encrypt"); // returns true :(
Run Code Online (Sandbox Code Playgroud)
我应该澄清为什么我需要知道Encrypt参数是否被显式指定。在 的当前版本中,的Microsoft.Data.SqlClient默认值为,但之前(中)为。因此,为了确保升级到后应用程序的向后兼容性,我想将参数设置为,除非用户明确指定了它的值。EncrypttrueSql.Data.SqlClientfalseMicrosoft.Data.SqlClientEncryptfalse
[基于与@Charlieface的讨论]
// important: *not* Microsoft.Data.SqlClient.SqlConnectionStringBuilder!
System.Data.SqlClient.SqlConnectionStringBuilder scsb =
new(connectionString);
if (!scsb.Encrypted) scsb.Encrypted = false; // this will explicitly set Encrypt
connectionString = scsb.ConnectionString;
Run Code Online (Sandbox Code Playgroud) MessageLockLostExceptions我在处理消息时不断收到消息。
LockDuration设置为 30 秒的队列,其中已经包含许多要处理的消息。现在我想LockDuration通过添加 来模拟运行时间稍长的消息处理任务(但仍在 之内)Task.Delay(10_000)。但随后我MessageLockLostException每收到 4 条消息就会收到一条消息。
即使我设置了MaxAutoRenewDuration = TimeSpan.FromDays(30)和 ,也会发生这种情况PrefetchCount = 0。
这是消息处理方法,我稍微修改一下,打印出剩余的锁定时长:
private static async Task processMessagesAsync(Message message, CancellationToken token)
{
Console.Write($"Received message: {message.SystemProperties.SequenceNumber}. Remaining lock duration: {message.SystemProperties.LockedUntilUtc - DateTime.UtcNow}");
await Task.Delay(10000);
await queueClient.CompleteAsync(message.SystemProperties.LockToken);
Console.WriteLine(" - Complete!");
}
Run Code Online (Sandbox Code Playgroud)
示例输出:
======================================================
Press ENTER key to exit after receiving all the messages.
====================================================== …Run Code Online (Sandbox Code Playgroud) 乍一看,延续令牌在 Cosmos DB 中的作用很明显:将它附加到下一个查询会为您提供下一组结果。但是“下一组结果”究竟是什么意思?
是不是意思:
答案 1. 似乎更可取,但不太可能,因为服务器需要存储无限量的状态。但是答案 2. 也有问题,因为它可能会导致不一致,例如,如果基础数据在页面查询之间发生了变化,则同一文档可能会跨页面多次提供。
如果你写这样的东西
this.MyMethod(this.MyMethod(myParam)).Should().BeNull();
Run Code Online (Sandbox Code Playgroud)
使用FluentAssertions库,当断言失败时抛出异常,并显示消息
Expected this.MyMethod(this.MyMethod(myParam)) to be <null>, but found "foo".
Run Code Online (Sandbox Code Playgroud)
它如何设法获取方法调用的语法上下文以生成如此有意义的异常消息?显然使用了某种反射,并且可能使用了一些堆栈跟踪检查(实际上,它仅在调试模式下和表达式写在一行中时才能正常工作),但究竟如何?
更具体地说,如何编写带有签名的方法
Expected this.MyMethod(this.MyMethod(myParam)) to be <null>, but found "foo".
Run Code Online (Sandbox Code Playgroud)
满足(在调试模式下)以下内容?
public static string GetSyntacticContext(object parameter);
Run Code Online (Sandbox Code Playgroud) 我(成功)使用客户端凭据流与 MSAL 来验证应用程序,如下所示:
private static async Task<AuthenticationResult> getAuthResultNonInteractively()
{
string[] scopes = {"api://xxx/.default"};
IConfidentialClientApplication app = ConfidentialClientApplicationBuilder.CreateWithApplicationOptions(
new ConfidentialClientApplicationOptions
{
TenantId = "xxx",
ClientId = "xxx",
RedirectUri = "http://localhost",
ClientSecret = "xxx"
})
.Build();
// Desired behaviour: acquires token online only if token does not
// exist in cache or is expired
AuthenticationResult authResult = await app.AcquireTokenForClient(scopes)
.ExecuteAsync();
return authResult;
}
Run Code Online (Sandbox Code Playgroud)
对first的调用是否AcquireTokenForClient会尝试在令牌缓存中查找令牌,并且仅当令牌在缓存中尚不存在或令牌已过期时才在线获取它?或者它总是在线获取令牌?如果后者是正确的,我需要改变什么才能获得所需的行为?