小编Mo *_* B.的帖子

更新到 .NET 6 后使用 JWT Bearer Token 进行身份验证时未经授权(无效令牌)

将软件包Microsoft.AspNetCore.Authentication.JwtBearer从版本 3.1.14 更新到 6.0.1 后,身份验证请求失败,并显示 401 Unauthorized invalid token

新的软件包版本需要更改哪些内容?

c# authentication jwt asp.net-core

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

为什么变量在模式中绑定两次?

通常,F#不允许模式变量在同一模式中出现两次.但是在下面的代码中,F#没有抱怨 - 这是一个错误吗?

type foo = { A: int }
let test (x, {A = x}) = x
let result = test ("bla", {A = 3})
Run Code Online (Sandbox Code Playgroud)

f# pattern-matching

17
推荐指数
1
解决办法
547
查看次数

在discrimated union类型声明中使用活动模式

是否可以在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)

f# discriminated-union active-pattern

5
推荐指数
1
解决办法
284
查看次数

在 Cosmos DB 中创建数据库/集合是否需要花费一些费用?

  • 每次在 Cosmos DB (SQL API) 中删除/重新创建数据库时都会产生费用吗?
  • 每次在 Cosmos DB (SQL API) 的数据库中删除/重新创建集合时是否会产生任何费用?

azure-cosmosdb

5
推荐指数
1
解决办法
1424
查看次数

Cosmos DB DocumentClient 的 DateTime 处理中的错误

这个问题与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# azure-cosmosdb azure-cosmosdb-sqlapi

5
推荐指数
1
解决办法
416
查看次数

检查 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)

c# connection-string system.data.sqlclient

5
推荐指数
1
解决办法
620
查看次数

Azure 服务总线不断抛出 MessageLockLostExceptions

MessageLockLostExceptions我在处理消息时不断收到消息。

现在我想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)

c# azureservicebus azure-servicebus-queues

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

Cosmos DB Continuation Token 如何工作?

乍一看,延续令牌在 Cosmos DB 中的作用很明显:将它附加到下一个查询会为您提供下一组结果。但是“下一组结果”究竟是什么意思?

是不是意思:

  1. 下一组结果就好像原始查询在第一次查询时没有分页完全执行一样(跳过适当数量的文档)?
  2. 下一组结果就好像现在已经执行了原始查询(跳过了适当数量的文档)?
  3. 完全不同的东西?

答案 1. 似乎更可取,但不太可能,因为服务器需要存储无限量的状态。但是答案 2. 也有问题,因为它可能会导致不一致,例如,如果基础数据在页面查询之间发生了变化,则同一文档可能会跨页面多次提供。

azure-cosmosdb

3
推荐指数
1
解决办法
1661
查看次数

如何返回 C# 方法调用的语法上下文

如果你写这样的东西

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)

c# reflection

3
推荐指数
1
解决办法
45
查看次数

AcquireTokenForClient (MSAL) 是否使用令牌缓存?

我(成功)使用客户端凭据流与 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会尝试在令牌缓存中查找令牌,并且仅当令牌在缓存中尚不存在或令牌已过期时才在线获取它?或者它总是在线获取令牌?如果后者是正确的,我需要改变什么才能获得所需的行为?

c# azure-ad-msal

3
推荐指数
1
解决办法
3021
查看次数

UpsertItemAsync 在 .NET Cosmos DB 客户端中做什么?

这个问题涉及到Microsoft.Azure.Cosmos v3.11.0

文件UpsertItemAsync没有为“更新插入”操作指定确切的语义。特别是,它是插入 + 替换,还是插入 +(部分)更新?(我怀疑是前者,因为截至今天这个问题仍然存在。)

azure-cosmosdb

0
推荐指数
1
解决办法
2281
查看次数