[UWP] PasswordVault に保存したデータをリソースを指定して取得する

PasswordVault に保存したデータをリソースを指定して取得しようとした際、データが存在しないときに例外が発生して困った話。

資格情報保管ボックス – Windows app development
を参考に以下のようなコードを書きましたが、保存しているデータがないときに vault.FindAllByResource(resourceName); で例外が発生する。

public static IEnumerable<PasswordCredential> Load()
{
    var resourceName = "ResourceName";
    var vault = new Windows.Security.Credentials.PasswordVault();
    var credentialList = vault.FindAllByResource(resourceName);  // 例外発生
    return credentialList
        .Select(credential =>
        {
            return vault.Retrieve(credential.Resource, credential.UserName);
        });
}
型 'System.Exception' の例外が Capsella.exe で発生しましたが、ユーザー コード内ではハンドルされませんでした
WinRT 情報:資格情報コンテナーに資格情報が見つかりません
追加情報:要素が見つかりません。

資格情報コンテナーに資格情報が見つかりません

try-catch しても良いのですが例外が発生すること自体がいまいちな気がしたので PasswordVault.RetrieveAll() を使用することにしました。

public static IEnumerable<PasswordCredential> Load()
{
    var resourceName = "ResourceName";
    var vault = new PasswordVault();
    return vault.RetrieveAll()
        .Where(credential => credential.Resource == resourceName)
        .Select(credential =>
        {
            return vault.Retrieve(credential.Resource, credential.UserName);
        });
}

カテゴリー: UWP タグ: , , パーマリンク