我正在使用该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)
我尝试了各种组合,但显然我错过了一些东西。我意识到我可以只检查文本,但这感觉很脏。
我尝试按照本教程对我的服务总线进行身份验证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)