C# 如何访问google日历的客户端机密文件
我想访问google日历的客户端_秘密文件,并使用它在我的日历中添加事件 我正在用c#创建一个聊天机器人,在我使用计算机路径的那一刻(当我试图在我的pc中访问我的项目的客户机机密文件时),它工作得很好 当我在网上发布项目并尝试访问该文件时,我无法访问 我的代码是:C# 如何访问google日历的客户端机密文件,c#,google-api-dotnet-client,google-calendar-api,C#,Google Api Dotnet Client,Google Calendar Api,我想访问google日历的客户端_秘密文件,并使用它在我的日历中添加事件 我正在用c#创建一个聊天机器人,在我使用计算机路径的那一刻(当我试图在我的pc中访问我的项目的客户机机密文件时),它工作得很好 当我在网上发布项目并尝试访问该文件时,我无法访问 我的代码是: string path = @"C:\Project\Test\Bot\V3\client_secret.json"; string pathi = @"{ 'installed': { 'client_id': '1111
string path = @"C:\Project\Test\Bot\V3\client_secret.json";
string pathi = @"{
'installed': {
'client_id': '1111111-
21432423.apps.googleusercontent.com',
'project_id': '111',
'auth_uri': 'https://accounts.google.com/o/oauth2/auth',
'token_uri': 'https://www.googleapis.com/oauth2/v3/token',
'auth_provider_x509_cert_url': 'https://www.googleapis.com/oauth2/v1/certs',
'client_secret': '22222222222222',
'redirect_uris': [ 'urn:ietf:wg:oauth:2.0:oob', 'http:dev.ai.com/BotTest/' ]
}
}";
UserCredential credential;
string[] Scopes = { CalendarService.Scope.Calendar };
string credPath = System.Environment.GetFolderPath(
System.Environment.SpecialFolder.Personal);
using (var stream =
new FileStream(pathi, FileMode.Open, FileAccess.Read))
credential = GoogleWebAuthorizationBroker.AuthorizeAsync(
GoogleClientSecrets.Load(stream).Secrets,
Scopes,
"user",
CancellationToken.None,
new FileDataStore(credPath, true)).Result;
string ApplicationName = "Google Calendar API .NET Quickstart";
var service = new CalendarService(new BaseClientService.Initializer()
{
HttpClientInitializer = credential,
ApplicationName = ApplicationName,
});
Event newEvent = new Event()
{
Summary = "Event",
Location = "",
Description = "Event is scheduled for: " +
eventi.Date.ToString("dd-MM-yyyy") + " " +
eventi.Time.ToShortTimeString(),
Start = new EventDateTime()
{
// DateTime = eventi.Date,
DateTime = new DateTime(eventi.Date.Year,
eventi.Date.Month, eventi.Date.Day, eventi.Time.Hour,
eventi.Time.Minute, 0),
TimeZone = "Europe/Brussels",
},
End = new EventDateTime()
{
DateTime = eventi.Date.AddMinutes(60),
// DateTime = new DateTime(eventi.Date.Year,
eventi.Date.Month, eventi.Date.Day, eventi.Time.Hour,
eventi.Time.Hour +1 ,0),
TimeZone = "Europe/Brussels",
},
Recurrence = new String[] { "RRULE:FREQ=DAILY;COUNT=1" },
Attendees = new EventAttendee[] {
new EventAttendee() { Email = "eeee@gmail.com" },
},
///////////////////////////////////////////
///////////////////////////////////////////
Reminders = new Event.RemindersData()
{
UseDefault = false,
Overrides = new EventReminder[] {
new EventReminder() { Method = "email", Minutes = 1 * 60 },
new EventReminder() { Method = "sms", Minutes = 10 },
}
}
};
String calendarId = "primary";
EventsResource.InsertRequest request1 =
service.Events.Insert(newEvent, calendarId);
Event createdEvent = request1.Execute();
Console.WriteLine("Event created: {0}", createdEvent.HtmlLink);
// Define parameters of request.
EventsResource.ListRequest request = service.Events.List("primary");
request.TimeMin = eventi.Time;
request.ShowDeleted = false;
request.SingleEvents = true;
request.MaxResults = 10;
request.OrderBy = EventsResource.ListRequest.OrderByEnum.StartTime;
// List events.
Events events = request.Execute();
Console.WriteLine("Upcoming events:");
if (events.Items != null && events.Items.Count > 0)
{
foreach (var eventItem in events.Items)
{
string when = eventItem.Start.Date;
if (String.IsNullOrEmpty(when))
{
when = eventItem.Start.Date;
}
Console.WriteLine("{0} ({1})", eventItem.Summary, when);
}
}
else
{
Console.WriteLine("No upcoming events found.");
}
//Console.Read();
// context.Wait(this.MessageReceived);
}
context.Wait(this.MessageReceived);
}
当我使用path时,在代码的这一部分中,我使用了path工作:
using (var stream =
new FileStream(path, FileMode.Open, FileAccess.Read))
credential = GoogleWebAuthorizationBroker.AuthorizeAsync(
GoogleClientSecrets.Load(stream).Secrets,
Scopes,
"user",
CancellationToken.None,
new FileDataStore(credPath, true)).Result;
当我将文件的根目录放到web中不起作用时,与将文件的所有脚本放到字符串路径中时一样:
string path = @"http://dev.aaaa.com/bot/client_secret.json"
我尝试只输入文件名,但仍然不起作用:
using (var stream =
new FileStream("client_secret.json", FileMode.Open, FileAccess.Read))
credential = GoogleWebAuthorizationBroker.AuthorizeAsync(
GoogleClientSecrets.Load(stream).Secrets,
Scopes,
"user",
CancellationToken.None,
new FileDataStore(credPath, true)).Result;
您能帮助我如何访问此文件吗?将credentials.json复制到bin\debug和bin\release文件夹中,如果您的客户端是控制台应用程序,请按此方法操作
UserCredential credential;
string credPath = System.Environment.GetFolderPath(
System.Environment.SpecialFolder.Personal);
using (var stream = new FileStream("credentials.json", FileMode.Open, FileAccess.Read))
{
credential = await GoogleWebAuthorizationBroker.AuthorizeAsync(
GoogleClientSecrets.Load(stream).Secrets,
new[] { CalendarService.Scope.CalendarReadonly },
"user", CancellationToken.None, new FileDataStore(credPath));
}
对于web应用程序,client_secret.json将如下所示,并包含重定向uri等
{"web":{"client_id":" ","project_id":" ","auth_uri":" ","token_uri":" ","auth_provider_x509_cert_url":" ","client_secret":" ","redirect_uris":[]}}
也不要透露您的任何id和机密。请确保为域“dev.aaaa.com”(通常在开发时我们提供localhost,但您可能必须更改为实际域,即“dev.aaaa.com”)定义的客户端id和机密与“client_secret.json”文件。同时将client_secret.json放在根目录下,只需提及文件名,因为新的FileStream只需要本地文件路径!是的,我输入了正确的域,但仍然不起作用。我收到这样一条消息:“path不能是空字符串”,事实上,当我调试path返回文件名path时(因此它不是空的):(thnx…in credentials.json是正确的,或者我必须使用client_secret进行更新。jsoni遇到以下错误:System.ArgumentException:Path不能是空字符串或全部空白。在System.IO.Directory.CreateDirectory(字符串路径)在Google.api.Util.Store.FileDataStore..ctor(字符串文件夹,布尔完整路径).事实上,path exist和path return client_secret.json文件您的访问令牌将保存在FileDataStore()的文件夹参数中在此之后,请查看谷歌认证屏幕,登录后,您还应该看到您必须允许的同意屏幕。请您帮我提供一个示例代码……我认为我的代码仅适用于桌面应用程序,但在web中,我必须使用smth,否则:(有必要对iis进行任何更改???因为很奇怪,当我在本地pc上测试时,我可以访问google caledar,而在web上部署时,我无法访问