c#我们如何让用户从动态生成的谷歌表单中获得访问权限?

c#我们如何让用户从动态生成的谷歌表单中获得访问权限?,c#,google-sheets,C#,Google Sheets,我正在动态地创建一些google工作表,给定我的一个端点上的数据数组 它成功创建,但当我打开生成的url时,我得到以下信息: 文档不是很清楚,但我希望在每次生成新工作表时向给定域(或人员集)添加权限 代码: private static readonly string[]Scopes={SheetsService.Scope.Drive,SheetsService.Scope.Spreadsheets}; 创建公共字符串(字符串模板名、列表值、int numberOfRows) { var-s

我正在动态地创建一些google工作表,给定我的一个端点上的数据数组

它成功创建,但当我打开生成的url时,我得到以下信息:

文档不是很清楚,但我希望在每次生成新工作表时向给定域(或人员集)添加权限

代码:

private static readonly string[]Scopes={SheetsService.Scope.Drive,SheetsService.Scope.Spreadsheets};
创建公共字符串(字符串模板名、列表值、int numberOfRows)
{
var-sheetId=0;
var spreadSheetId=string.Empty;
var initializer=新ServiceAccountCredential.initializer(SheetsOptionsConstants.ServiceAccountEmail)
{
范围=范围
}.from PrivateKey(表soptions constants.PrivateKey);
var凭证=新的ServiceAccountCredential(初始值设定项);
//创建GoogleSheetsAPI服务。
var service=new SheetsService(new BaseClientService.Initializer
{
HttpClientInitializer=凭证,
ApplicationName=ApplicationName
});
//创建新图纸
var sheetTitle=$“[{templateName}]{{u clock.Now:yyyyy-MM-dd-HH-MM}”;
尝试
{
var sheet=新的BatchUpdateSpreadsheetRequest
{
请求=新列表
{
新要求
{
AddSheet=新的AddSheetRequest
{
属性=新属性
{
标题=图纸标题
}
}
}
}
};
var createRequest=新电子表格
{
属性=新的电子表格属性
{
标题=图纸标题
}
};
var spreadSheetCreate=service.Spreadsheets.Create(createRequest.Execute();
spreadSheetId=spreadSheetCreate.spreadSheetId;
var请求=服务.电子表格.批处理更新(表格,电子表格ID);
var result=request.Execute();
sheetId=result.Replies.First().AddSheet.Properties.sheetId.GetValueOrDefault(0);
//在工作表中添加数据
变量范围=$“{sheetTitle}”!A1:X{numberOfRows+1}”;
var valueRange=新的valueRange
{
范围=范围,
值=值
};
var valuesRequest=service.Spreadsheets.Values.Update(valueRange,spreadSheetId,range);
valuesRequest.ValueInputOption=电子表格Resource.ValuesResource.UpdateRequest.ValueInputOptionEnum.USERENTERED;
valuesRequest.Execute();
_logger.LogInformation(“创建名为{sheetTitle}和{count}行的工作表”,sheetTitle,numberOfRows);
}
捕获(异常)
{
_logger.LogError(异常,“创建名为{sheetTitle}的工作表时出错”,sheetTitle);
}
返回string.Format(TemplateUrl、spreadSheetId、sheetId);
}

提前感谢

您需要使用驱动器API为工作表创建权限。为此,请初始化驱动器服务并创建权限对象。然后,使用以下方法将其应用于图纸Id

您应该在代码中包含以下内容:

using Google.Apis.Drive.v3;
using Google.Apis.Drive.v3.Data; //This might be not necessary if you already use Drive.v3
所需范围:

https://www.googleapis.com/auth/drive.file

创建对象:

然后请求:

// Create Drive API service.
            var service = new DriveService(new BaseClientService.Initializer()
            {
                HttpClientInitializer = credential,
                ApplicationName = ApplicationName,
            });
service.Permissions.Create(perms, sheetId).Execute();
参考文献:

  • 从驱动器Api

谢谢你的回答!我试图实现这种方法,但我得到了一个答案,即资源体包含不可直接写入的字段。[403]错误。我创建了工作表,然后添加了一个权限。我遗漏了什么吗?没关系,我在添加其他参数!它很管用,谢谢!
//(example to give writing permissions to a domain)
Permission perms = new Permission();
perms.Role = "writer";
perms.Type = "domain";
perms.Domain = "your_domain";
// Create Drive API service.
            var service = new DriveService(new BaseClientService.Initializer()
            {
                HttpClientInitializer = credential,
                ApplicationName = ApplicationName,
            });
service.Permissions.Create(perms, sheetId).Execute();