Создал функцию аутентификации для службы правил firebase и вызвал экземпляр службы для создания набора правил firebase, но он возвращает System.NullReferenceException: ссылка на объект не указывает на экземпляр объекта. Что я здесь пропустил?
using Google.Apis.FirebaseRules.v1;
using Ruleset = Google.Apis.FirebaseRules.v1.Data.Ruleset;
using Source = Google.Apis.FirebaseRules.v1.Data.Source;
using File = Google.Apis.FirebaseRules.v1.Data.File;
private static FirebaseRulesService _firebaseRulesService;
public static void IntializeFirebaseRules() {
GoogleCredential credential = GoogleCredential.GetApplicationDefault();
if (CloudManager.Credential.IsCreateScopedRequired)
{
credential = CloudManager.Credential.CreateScoped(FirebaseRulesService.Scope.CloudPlatform);
}
_firebaseRulesService = new FirebaseRulesService(
new BaseClientService.Initializer()
{
HttpClientInitializer = credential,
ApplicationName = CloudManager.ApplicationName
});
}
public static async void AddRuleset()
{
Ruleset myRuleset = new Ruleset {
new Source {
Files = {
new File {
Name = "firestore.rules",
Content = "service cloud.firestore {" +
"match /databases/{database}/documents {" +
"match /users/{userId}{" +
"allow read: if (request.auth.uid == userId);" +
"}" +
"match /licenses/{accountId} {" +
"allow read: if isAccountOwner(accountId);" +
"}" +
"}"+
"}",
}
}
};
};
_firebaseRulesService.Projects.Rulesets.Create(myRuleset , "projects/" + CloudManager.ProjectId);
}
** Отредактировано -> объекты разделены, как показано ниже, и возникает исключение NullReferenceException в строке Source mySource = new Source
File myFile = new File {
Name = "firestore.rules",
Content = "service cloud.firestore {" +
"match /databases/{database}/documents {" +
"match /users/{userId}{" +
"allow read: if (request.auth.uid == userId);" +
"}" +
"function doc(subpath) {" +
"return get(/databases/$(database)/documents/$(subpath)).data;" +
"}" +
"function isAccountOwner(accountId) {" +
"return request.auth.uid == accountId" +
"|| doc(/users/$(request.auth.uid)).accountId == accountId;" +
"}" +
"match /licenses/{accountId} {" +
"allow read: if isAccountOwner(accountId);" +
"}" +
"}"+
"}",
};
Source mySource = new Source {
Files = {
myFile
}
};
Ruleset myRuleset = new Ruleset {
Source = mySource
};
_firebaseRulesService.Projects.Rulesets.Create(myRuleset , "projects/" + CloudManager.ProjectId);
Набор правил myRuleset = новый набор правил { <- эта строка
Отвечает ли это на ваш вопрос? Что такое NullReferenceException и как его исправить?
Да, jazb, я читал там ответы, но все равно не понимаю, почему я получаю ошибку NullReferenceException, я инициализировал все экземпляры и присвоил им значение, я посмотрю еще раз.
Чтобы изолировать проблему, вместо одного оператора попробуйте отдельные шаги: сначала new File {..}, затем new Source {..} с этим файлом, наконец, new Ruleset{..} с этим источником. Вам не нужен Source= там?
ОТ у вас есть метод async void. Это почти никогда не бывает хорошей идеей (единственное исключение: обработчики событий). Но в этом случае просто уберите async, вы ничего await здесь не делаете
Эй, Ганс, я разделил, как вы предложили, сначала я создал новый файл {...}, затем новый источник {...}, второй и, наконец, я передал его в новый набор правил {...}, и теперь нулевое исключение возникает на новую строку исходного кода, а также удалил асинхронный





Это утверждение:
Source mySource = new Source {
Files = {
myFile
}
};
... пытается добавить myFile в коллекцию Files, но я подозреваю, что по умолчанию вы обнаружите, что это null. Вместо этого вы можете инициализировать его списком:
Source mySource = new Source { Files = new List<File> { myFile } };
в какой строке проблема?