Использование параметров приложения службы приложений Azure приводит к ошибке HTTP 500 - PullRequest
0 голосов
/ 30 октября 2018

Я использую общий уровень для развертывания моего веб-приложения .NET Core в Azure.

Ниже приведен мой файл app.config,

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <appSettings>
    <add key="SASToken" value="" />
    <add key="StorageAccountPrimaryUri" value="" />
    <add key="StorageAccountSecondaryUri" value="" />
  </appSettings>
</configuration>

В разделе Настройки приложения на портале Azure я обновил следующие вещи,

enter image description here

Но, когда я получаю доступ к своему API, я получаю сообщение об ошибке Http 500 с указанными ниже деталями исключения,

System.ArgumentException: The argument must not be empty string. Parameter name: sasToken at Microsoft.WindowsAzure.Storage.Core.Util.CommonUtility.AssertNotNullOrEmpty(String paramName, String value) at Microsoft.WindowsAzure.Storage.Auth.StorageCredentials..ctor(String sasToken) at ProfileVariable.DataAccessor.AzureTableStorageAccount.TableStorageAccount.ConfigureAzureStorageAccount() in C:\Users\sranade\Source\Repos\ProfileVariableService\ProfileVariable.DataAccessor\AzureTableStorageAccount\TableStorageAccount.cs:line 22

1 Ответ

0 голосов
/ 31 октября 2018

Для веб-приложения .NET Core мы обычно помещаем настройки в appsettings.json.

{
  "SASToken": "TOKENHERE",
  "StorageAccountPrimaryUri":"CONNECTIONSTRING",
  ...
}

Чтобы получить значение в appsetting.json, используйте вставленный объект IConfiguration.

  1. Рефакторинг кода с помощью интерфейса и добавление поля IConfiguration.

    public interface ITableStorageAccount { string Method(); }
    
    public class TableStorageAccount : ITableStorageAccount
    {
    
        private readonly IConfiguration Configuration;
    
        public TableStorageAccount(IConfiguration configuration)
        {
            Configuration = configuration;
        }
    
        // an example return table storage uri
        public string Method()
        {
            string cre = Configuration["SASToken"];
            CloudTableClient table = new CloudTableClient(new Uri("xxx"), new StorageCredentials(cre));
            return table.BaseUri.AbsolutePath;
        }
    }
    
  2. Внедрение зависимости конфигурации в startup.cs

    public void ConfigureServices(IServiceCollection services)
    {
        ...
        services.AddSingleton<ITableStorageAccount, TableStorageAccount>();
    }
    
  3. Воспользуйтесь услугой в контроллере.

    private readonly ITableStorageAccount TableStorageAccount;
    
    public MyController(ITableStorageAccount TableStorageAccount)
    {
        this.TableStorageAccount = TableStorageAccount;
    }
    

В шаблоне Program.cs.

    public static IWebHost BuildWebHost(string[] args) =>
        WebHost.CreateDefaultBuilder(args)
            .UseStartup<Startup>()
            .Build();

CreateDefaultBuilder() выполняет загрузку конфигураций, таких как appsetting.json, подробности см. В docs .

...