c# - StorageAccountList 请求在本地有效,但在 dotnet 应用程序中部署时无效

标签 c# azure .net-core azure-storage

我有一个 web-api,它是一个应用服务“实例”,部署在 Azure 上。这个 web-api 基于 dotnet-core,它使用版本 6。我有另一个资源,存储帐户,其中有几个用于实现我的目标的存储帐户。归根结底,我的目标是列出所有这些存储帐户并通过我的 web-api 传递到我的客户端应用程序。为此,我使用了 Microsoft 的 docs 推荐的方法。 :

using System;
using System.Threading.Tasks;
using Azure;
using Azure.Core;
using Azure.Identity;
using Azure.ResourceManager;
using Azure.ResourceManager.Models;
using Azure.ResourceManager.Resources;
using Azure.ResourceManager.Storage;
using Azure.ResourceManager.Storage.Models;

TokenCredential cred = new DefaultAzureCredential();
ArmClient client = new ArmClient(cred);

string subscriptionId = "{subscription-id}";
ResourceIdentifier subscriptionResourceId = SubscriptionResource.CreateResourceIdentifier(subscriptionId);
SubscriptionResource subscriptionResource = client.GetSubscriptionResource(subscriptionResourceId);

await foreach (StorageAccountResource item in subscriptionResource.GetStorageAccountsAsync())
{
    StorageAccountData resourceData = item.Data;
    Console.WriteLine($"Succeeded on id: {resourceData.Id}");
}

Console.WriteLine($"Succeeded");

这工作得很好,它列出了所有存储帐户,但在本地服务器上,当我部署它时,此功能不起作用。我是第一次使用 ArmClient,我假设问题出在某个地方,但不能 100% 确定。你们中有人偶然发现过这样的问题吗?如果是这样,你是如何解决的?

最佳答案

您的代码在本地运行的原因很可能是因为您在 Visual Studio 或 Azure PowerShell/CLI 中使用凭据登录,并且当您调用 TokenCredential cred = new DefaultAzureCredential(); 时,它正在利用您的凭据来执行 ARM API。

但是,当在 Azure 中执行相同的代码时,您很可能没有为您的 Web 应用程序配置托管标识,因此您的代码会失败。

要解决此问题,您可以将托管身份分配给您的 Web 应用程序并为其分配适当的 RBAC 角色。一旦这样做,您就不应该收到错误。

您可能会发现此链接很有帮助:https://learn.microsoft.com/en-us/azure/app-service/scenario-secure-app-access-storage?tabs=azure-portal .

关于c# - StorageAccountList 请求在本地有效,但在 dotnet 应用程序中部署时无效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/75593776/

相关文章:

c# - 在按钮单击事件中增加图像按钮的亮度

c# - 如何对 C# 类对象值进行分组。这可以用 LINQ 实现吗?

Azure 可用性区域 - 美国东部有多少个区域?

azure - 如何将运行时参数的数量传递给Azure管道中的变量?

c# - 在 ASP.NET Core Web-Api 中用 Interlocked.Exchange(ref oldValue, newValue) 替换不可变数据结构是否安全

c# - 大字典的递归函数导致堆栈溢出问题

c# - 如何使用 C# 中的内置网页浏览器保存完整的网页

c# - 为什么 C# 中的整数除法返回整数而不是 float ?

c# - 没有 MediaTypeFormatter 可用于从媒体类型为 'HttpRequestMessage' 的内容中读取类型为 'multipart/form-data' 的对象

linux - 点网核心 : cross platform version of GetInvalidFileNameChars?