我在我的mvc 5项目中使用gmail api,它在本地(调试模式)下工作正常
继承我的代码:
UserCredential credential1;
var folder = System.Web.HttpContext.Current.Server.MapPath("/App_Data/MyGoogleStorage");
credential1 = await GoogleWebAuthorizationBroker.AuthorizeAsync(
new ClientSecrets
{
ClientId = "xxxxxxxxxxxx.apps.googleusercontent.com",
ClientSecret = "xxxxxxxxxxxxxxxxxxx"
},
//GoogleClientSecrets.Load(stream).Secrets,
// This OAuth 2.0 access scope allows for read-only access to the authenticated
// user's account, but not other types of account access.
new[] { GmailService.Scope.GmailReadonly, GmailService.Scope.MailGoogleCom, GmailService.Scope.GmailModify },
"user",
CancellationToken.None,
new FileDataStore(folder)
);
但是当我发布它并尝试从iis运行时,我得到了:
[System.AggregateException:发生了一个或多个错误。 ---> System.Net.HttpListenerException:在Google.Apis.Auth的Google.Apis.Auth.OAuth2.LocalServerCodeReceiver.StartListener()上的System.Net.HttpListener.Start()处的System.Net.HttpListener.AddAllPrefixes()处拒绝访问。 OAuth2.LocalServerCodeReceiver.d__8.MoveNext()---从抛出异常的先前位置开始的堆栈跟踪结束---在System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification的System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务任务)处(任务任务)在Google.Apis.Auth.OAuth2.AuthorizationCodeInstalledApp.d__8.MoveNext()---从抛出异常的上一个位置的堆栈跟踪结束---在System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务任务) )在Google.Apis.Auth.OAuth2.GoogleWebAuthorizationBroker.d__4.MoveNext()的System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务任务)中 - 从抛出异常的上一个位置开始的堆栈跟踪结束---在系统中。 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务任务)中的Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务任务),位于Google.Apis.Auth.OAuth2.GoogleWebAuthorizationBroker.d__1.MoveNext()---内部异常堆栈跟踪结束---在C:\ Users \ Administrator \ Desktop \ DataOtomasyon \ DataOtomasyon \ Helpers \ gmailApi.cs中的DataOtomasyon.Helpers.gmailApi.d__2.MoveNext()处的System.Threading.Tasks.Task`1.GetResultCore(布尔值waitCompletionNotification) :第58行---> (内部异常#0)System.Net.HttpListenerException(0x80004005):在Google.Apis.Auth.OAuth2.LocalServerCodeReceiver.StartListener的System.Net.HttpListener.Start()处的System.Net.HttpListener.AddAllPrefixes()处拒绝访问()at Google.Apis.Auth.OAuth2.LocalServerCodeReceiver.d__8.MoveNext()---从抛出异常的上一个位置开始的堆栈跟踪结束---在System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务任务)at Google.Apis.Auth.OAuth2.AuthorizationCodeInstalledApp.d__8.MoveNext()中的System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务任务)---抛出异常的前一个位置的堆栈跟踪结束---在System.Runtime位于System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务任务)的.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务任务),位于Google.Apis.Auth.OAuth2.GoogleWebAuthorizationBroker.d__4.MoveNext()---来自先前位置的堆栈跟踪结束其中e xception被抛出---在System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务任务)处,位于Google.Apis.Auth.OAuth2.GoogleWebAuthorizationBroker.d__1.MoveNext( < ---]
我检查了所有可用iis用户的权限,并授予他们所有人的读/写权限我真的很困惑,任何帮助将不胜感激
答案 0 :(得分:0)
credential = GoogleWebAuthorizationBroker.AuthorizeAsync(
GoogleClientSecrets.Load(stream).Secrets,
Scopes,
"user",
CancellationToken.None,
new FileDataStore(credPath, true),
new PromptCodeReceiver()).Result;
这可能是很久以前的问题,但我遇到了同样的问题,解决它的问题是使用PromptCodeReceiver而不是设置代码接收器参数。事实证明,当未定义代码接收器时,GoogleWebAuthorizationBroker默认使用LocalServerCodeReceiver。