ConfigurationManager и AppSettings в универсальном (UWP) приложении
Я хотел бы сохранить ключ API в файле конфигурации без проверки его в исходном элементе управления и прочитать данные в своем приложении UWP.
Общим решением является сохранение ключа в файле .config(например, app.config
или web.config
) и доступ к нему следующим образом:
var apiKey = ConfigurationManager.AppSettings.Get("apiKey");
Я работаю над универсальным приложением (UWP) и не могу получить доступ к пространству имен System.Configuration, содержащему ConfigurationManager
.
Как я могу получить доступ к AppSettings в приложении UWP?
В качестве альтернативы, какой лучший способ получить доступ к данным конфигурации в приложении UWP?
Ответы
Ответ 1
В моем конкретном случае использования мне нужно было использовать внешний файл, который не отслеживается с помощью элемента управления источником. Существует два способа доступа к данным из файлов ресурсов или конфигурации.
Один из них - открыть и проанализировать конфигурационный файл. Для файла sample.txt
с Строить действие Content
( Копировать в каталог вывода не имеет значения), мы можем прочитать его с помощью
var uri = new System.Uri("ms-appx:///sample.txt");
var sampleFile = await Windows.Storage.StorageFile.GetFileFromApplicationUriAsync(uri);
или
var packageFolder = Windows.ApplicationModel.Package.Current.InstalledLocation;
var sampleFile = await packageFolder.GetFileAsync("sample.txt");
за которым следует
var contents = await Windows.Storage.FileIO.ReadTextAsync(sampleFile);
В качестве альтернативы мы можем использовать Ресурсы. Добавьте новый проект в проект под названием resourcesFile.resw
. Чтобы получить доступ к данным, используйте:
var resources = new Windows.ApplicationModel.Resources.ResourceLoader("resourcesFile");
var token = resources.GetString("secret");
Я написал более подробный ответ в сообщении в блоге Пользовательские файлы ресурсов в UWP
Ответ 2
Я думаю, что то, что вы называете "ApiKey", является статическим ключом, который API дает вам для создания токена доступа. Если это так, возможно, лучший способ добиться этого - создать статический класс из исходного элемента управления с этим значением внутри него, что-то вроде этого:
public static class MyCredentials
{
public static string MyApiKey = "apiKey";
}
Затем вы легко получаете доступ к этому значению из своего кода:
var myApiKey = MyCredentials.MyApiKey;
Если вы хотите сохранить значения в текстовом файле, вам придется писать/читать его вручную, используя классы StorageFile
и FileIO
.
Вместо этого, если "ApiKey" означает токен динамического доступа, лучшим решением является использование ApplicationDataContainer
, как сказано.
Ответ 3
Это старый вопрос, но вот мое решение:
- Создайте частичный класс Config.cs (например) со всеми необходимыми вам свойствами
- Добавьте частичный метод void Init()
- Вызовите Init в конструкторе
- Создайте другой файл Config.partial.cs с помощью метода void Init(), заполнив все ваши свойства
-> Используйте #if DEBUG/#else/#endif для переключения с Debug/Release
-> Используйте exclude Config.partial.cs из Github, чтобы не импортировать его в хранилище
Теперь это скомпилировать и не в хранилище
В качестве альтернативы вы можете установить в Config.cs стандартные (не секретные) данные.
Config.cs:
public partial class Config
{
public Config()
{
Init();
}
partial void Init();
public string ApiKey{ get; private set; }= "DefaultValueAPIKEY";
}
Config.partial.cs
public partial class Config
{
partial void Init()
{
#if DEBUG
this.ApiKey = "DebugAPIKEY";
#else
this.ApiKey = "ReleaseAPIKEY";
#endif
}
}
Ответ 4
Вам не нужно создавать файл конфигурации. UWP имеет встроенное решение для хранения локальных настроек/конфигураций. Проверьте этот учебник:
https://msdn.microsoft.com/en-us/library/windows/apps/mt299098.aspx
Используя ApplicationDataContainer, вы сможете получить значение по ключу:
Object value = localSettings.Values["exampleSetting"];