小编sta*_*age的帖子

如何在 C# 中检查运行时类型

我正在使用该Type.GetType()方法返回给定字符串的类型;但是,我正在努力寻找一种检查类型的方法:

var type = Type.GetType("ConsoleApp2.Class1");

if (type is ConsoleApp2.Class1) // Is never true, and gives a warning to that effect
{

}

switch (type)
{
    case ConsoleApp2.Class1: 
        // Will not compile (Expression of Type cannot be handled by a pattern of type Class1
        break;
}
Run Code Online (Sandbox Code Playgroud)

我尝试了各种组合,但显然我错过了一些东西。我意识到我可以只检查文本,但这感觉很脏。

c#

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

尝试将托管标识与 Azure 服务总线一起使用

我尝试按照教程对我的服务总线进行身份验证DefaultAzureCredentials,但是,我收到了 401。

我在设置中使用以下代码:

services.AddAzureClients(x =>
{
    x.AddServiceBusClientWithNamespace("myns.servicebus.windows.net")
        .WithCredential(new Azure.Identity.DefaultAzureCredential());
});
Run Code Online (Sandbox Code Playgroud)

然后我像这样调用 SB 客户端:

var sender = client.CreateSender("myqueue");
var message = new ServiceBusMessage(Encoding.UTF8.GetBytes("test"));

await sender.SendMessageAsync(message);
Run Code Online (Sandbox Code Playgroud)

当我打电话时,SendMessageAsync我收到 401 错误:

失败:Azure-Messaging-ServiceBus[82] 为标识符创建发送链接时发生异常:myqueue-578624f3-f732-4a9b-2ab0-9adc01949a5a。错误消息:'System.UnauthorizedAccessException:放置令牌失败。状态代码:401,状态描述:InvalidIssuer:令牌发行者无效。TrackingId:cde3a89c-8108-48d1-8b8f-dacde18e176f, SystemTracker:NoSystemTracker, Timestamp:2021-05-19T07:18:44。

在我运行它之前,我调用az login. 我可以访问命名空间来发送和接收。我的猜测是我需要在服务总线和......之间分配某种权限 - 但由于我将它作为控制台应用程序运行,我使用自己的凭据运行。显然,我不明白有关托管身份的某些内容。

编辑:

根据@juunas 的建议,我尝试了以下操作:

services.AddHostedService<ConsoleHostedService>();
services.AddAzureClients(x =>
{
    //var creds = new Azure.Identity.EnvironmentCredential(); // 1st - EnvironmentCredential authentication unavailable. Environment variables are not fully configured.'
    //var creds = new Azure.Identity.ManagedIdentityCredential(); // 2nd - No Managed Identity endpoint …
Run Code Online (Sandbox Code Playgroud)

azure azureservicebus azure-managed-identity

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