使用Google.Apis.Firestore.v1创建默认Cloud Firestore数据库遇格式错误求助
解决Cloud Firestore数据库创建时的命名错误问题
使用Google.Apis.Firestore.v1库为Firebase项目创建Cloud Firestore数据库时,遇到数据库命名错误,提示database_id should be 4-63 characters, and valid characters are /[a-z][0-9]-/。相关代码和错误信息如下:
代码示例
using Google.Apis.Firestore.v1; private static FirestoreService _firestoreService; public static void IntializeFirestoreAdmin() { GoogleCredential credential = GoogleCredential.GetApplicationDefault(); if (CloudManager.Credential.IsCreateScopedRequired) { credential = CloudManager.Credential.CreateScoped(FirestoreService.Scope.CloudPlatform); } _firestoreService = new FirestoreService( new BaseClientService.Initializer() { HttpClientInitializer = credential, ApplicationName = CloudManager.ApplicationName }); } public static void AddCloudFirestore() { IntializeFirestoreAdmin(); var mydata = new GoogleFirestoreAdminV1Database { LocationId = "nam5", Type = "FIRESTORE_NATIVE", Name = "projects/" + CloudManager.ProjectId + "/databases/(default)", }; _firestoreService.Projects.Databases.Create(mydata, "projects/" + CloudManager.ProjectId).Execute(); }
错误信息
Unhandled exception. The service firestore has thrown an exception. HttpStatusCode is BadRequest. Google.Apis.Requests.RequestError database_id should be 4-63 characters, and valid characters are /[a-z][0-9]-/ [400] Errors [ Message[database_id should be 4-63 characters, and valid characters are /[a-z][0-9]-/] Location[ - ] Reason[badRequest] Domain[global] ] Google.GoogleApiException: The service firestore has thrown an exception. HttpStatusCode is BadRequest. database_id should be 4-63 characters, and valid characters are /[a-z][0-9]-/ at Google.Apis.Requests.ClientServiceRequest`1.ParseResponse(HttpResponseMessage response) at Google.Apis.Requests.ClientServiceRequest`1.Execute()
问题原因
你手动设置了Name字段为包含(default)的路径,导致API解析出的数据库ID为(default),但该ID包含括号(),不符合Cloud Firestore数据库ID的规则(仅允许小写字母、数字、连字符,长度4-63字符)。同时,Name字段是由服务器自动生成的资源完整路径,客户端无需手动指定。
解决方法
根据你的需求选择以下两种方式:
1. 创建自定义数据库
指定一个符合规则的数据库ID(小写字母、数字、连字符组合,长度4-63字符),设置DatabaseId字段而非Name字段:
public static void AddCloudFirestore() { IntializeFirestoreAdmin(); var mydata = new GoogleFirestoreAdminV1Database { LocationId = "nam5", Type = "FIRESTORE_NATIVE", DatabaseId = "my-custom-db-01" // 替换为符合规则的自定义ID }; _firestoreService.Projects.Databases.Create(mydata, "projects/" + CloudManager.ProjectId).Execute(); }
2. 创建默认数据库
如果你需要创建默认数据库(ID为(default)),无需设置Name或DatabaseId字段,API会自动处理:
public static void AddCloudFirestore() { IntializeFirestoreAdmin(); var mydata = new GoogleFirestoreAdminV1Database { LocationId = "nam5", Type = "FIRESTORE_NATIVE" // 不设置Name和DatabaseId,自动创建默认数据库 }; _firestoreService.Projects.Databases.Create(mydata, "projects/" + CloudManager.ProjectId).Execute(); }
内容的提问来源于stack exchange,提问作者Samaritan
相关产品推荐
相关产品推荐

