使用Azure App Service的应用程序设置导致HTTP 500错误

时间:2018-10-30 18:35:15

标签: c# azure azure-web-sites azure-api-apps

我正在使用共享层将.NET Core Web应用程序部署到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 :(得分:1)

对于.NET Core Web应用,通常将设置放在appsettings.json中。

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

要在appsetting.json中获取价值,请利用注入的IConfiguration对象。

  1. 使用Interface重构代码并添加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中的更多详细信息。