Ala*_*n B 5 c# azure .net-core azure-functions
我的local.settings.json中有这些条目
{
"IsEncrypted": false,
"Values": {
"AzureWebJobsStorage": "whateverstorageaccountconnectionstring",
"FUNCTIONS_WORKER_RUNTIME": "dotnet"
},
"BusinessUnitMapping": {
"Values": {
"Connections": "CON",
"Products": "PRD",
"Credit & Affordability": "CAA",
"Accounts Receivable": "ARC",
"Identity": "IDT"
}
}
}
Run Code Online (Sandbox Code Playgroud)
我有这段代码在启动时读取值
services.Configure<BusinessUnitMapping>(options => configuration.GetSection("BusinessUnitMapping").Bind(options));
Run Code Online (Sandbox Code Playgroud)
BusinessUnitMapping在哪里
public class BusinessUnitMapping
{
public Dictionary<string, string> Values { get; set; }
public BusinessUnitMapping()
{
Values = new Dictionary<string, string>(StringComparer.OrdinalIgnoreCase);
}
}
Run Code Online (Sandbox Code Playgroud)
当我在本地运行功能应用程序时,它可以毫无问题地将这些设置读取到BusinessUnitMapping中。
Azure Portal中应用程序设置的高级编辑仅允许简单的键值对,如下所示
[
{
"name": "AzureWebJobsDashboard",
"value": "DefaultEndpointsProtocol=Somevalue",
"slotSetting": false
},
{
"name": "AzureWebJobsStorage",
"value": "DefaultEndpointsProtocol=Somevalue",
"slotSetting": false
},
...
]
Run Code Online (Sandbox Code Playgroud)
-艾伦-
- 这是在 Azure Function 中存储复杂应用程序设置的正确方法吗?
这仍然是一个悬而未决的问题:请参阅此 github 问题正是问这个问题
- 如何在 Azure 门户中为已部署的函数应用配置 BusinessUnitMapping?
我目前的首选方法是使用 选项模式与使用 GetEnvironmentVariable 的委托一起使用,该委托将在本地和 Azure 中工作。缺点是您无法在本地设置文件本身中创建复杂类型,但您的对象可以随心所欲地复杂化。
一个简单的例子:
在 local.settings.json 中:
{
...
"Values": {
"AzureWebJobsStorage": "UseDevelopmentStorage=true",
...
"SomeSection:Setting1": "abc",
"SomeSection:Setting2": "xyz",
},
...
}
Run Code Online (Sandbox Code Playgroud)
在您的启动中:
services.Configure<MySettingsPoco>(o =>
{
o.Setting1 = Environment.GetEnvironmentVariable("SomeSection:Setting1");
o.Setting2 = Environment.GetEnvironmentVariable("SomeSection:Setting2");
});
Run Code Online (Sandbox Code Playgroud)
然后在 Azure 中,您可以按如下方式创建这些设置:
Jim*_* Xu -1
1. 这是在 Azure Function 中存储复杂应用程序设置的正确方法吗?
我们可以将这些条目保存在应用程序设置中。更多详细信息,请参阅文档。详细步骤如下。
2. 如何在 Azure 门户中为我已部署的 Function App 配置 BusinessUnitMapping?
根据我的测试,我们可以使用以下代码来做到这一点
#r "Newtonsoft.Json"
using System.Net;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Primitives;
using Newtonsoft.Json;
using System.Collections.Generic;
public static async Task<IActionResult> Run(HttpRequest req, ILogger log)
{
log.LogInformation("C# HTTP trigger function processed a request.");
var test =Environment.GetEnvironmentVariable("test",EnvironmentVariableTarget.Process);
log.LogInformation(test);
var values= JsonConvert.DeserializeObject<Dictionary<string, string>>(test);
var businessUnitMapping = new BusinessUnitMapping();
businessUnitMapping.Values = values;
log.LogInformation(businessUnitMapping.Values["Products"]);
string name = req.Query["name"];
string requestBody = await new StreamReader(req.Body).ReadToEndAsync();
dynamic data = JsonConvert.DeserializeObject(requestBody);
name = name ?? data?.name;
return name != null
? (ActionResult)new OkObjectResult($"Hello, {name}")
: new BadRequestObjectResult("Please pass a name on the query string or in the request body");
}
public class BusinessUnitMapping
{
public Dictionary<string, string> Values { get; set; }
public BusinessUnitMapping()
{
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
208 次 |
| 最近记录: |