Cosmonaut (Cosmos DB) - неверная строка Base-64 - PullRequest
0 голосов
/ 27 октября 2019

Я пытаюсь написать общие классы cosmos Db, которые будут полезны, когда существует множество коллекций с помощью Cosmonaut, оболочки CosmosDb. Вот пример класса Factory

 public class CosmosDbClientFactory: ICosmosDbClientFactory
{
    private readonly string _databaseName;
    private readonly string _endpointUrl;
    private readonly string _masterKey;

    public CosmosDbClientFactory(string databaseName, string endpointUrl, string masterKey)
    {
        _databaseName = databaseName ?? throw new ArgumentNullException(nameof(databaseName));
        _endpointUrl = endpointUrl ?? throw new ArgumentNullException(nameof(endpointUrl));
        _masterKey = masterKey ?? throw new ArgumentNullException(nameof(masterKey));
    }

    public CosmosStoreSettings GetCosmosStoreSettings()
    {
        var cosmosStoreSettings = new CosmosStoreSettings(
            databaseName: _databaseName,
            endpointUrl: _endpointUrl,
            authKey: _masterKey );
        return cosmosStoreSettings;
    } 

И у меня есть класс репозитория

public abstract class CosmosDbRepository<T> where T: Entity
{
    private readonly ICosmosDbClientFactory _cosmosDbClientFactory;

    protected CosmosDbRepository(ICosmosDbClientFactory cosmosDbClientFactory)
    {
        _cosmosDbClientFactory = cosmosDbClientFactory;
    }

    public Task<string> AddAsync(T entity)
    {
        try
        {
            entity.Id = GenerateId(entity);
            ICosmosStore<T> cosmosStore = new CosmosStore<T>(_cosmosDbClientFactory.GetCosmosStoreSettings());
            var response = cosmosStore.AddAsync(entity);
            return Task.FromResult(entity.Id);
        }
        catch (Exception e)
        {
            Debug.WriteLine("Failed to save data into CosmosDb");
            throw;
        }
    } 
}

, когда я пытаюсь использовать этот репозиторий, я получаю ошибку ниже

"Входные данные не являются допустимой строкой Base-64, поскольку они содержат неосновной 64-символ, более двух символов заполнения или недопустимый символ среди символов заполнения."

из строки

 ICosmosStore<T> cosmosStore = new CosmosStore<T>(_cosmosDbClientFactory.GetCosmosStoreSettings());

Интересно, кто-нибудь может мне помочь выяснить причину?

1 Ответ

1 голос
/ 29 октября 2019

Исходя из комментариев, источником проблемы является то, что предоставленный _masterKey не был ни действительной строкой Base 64, ни действительным ключом Cosmos DB.

...