c# web service Google Analytics



我试图用C#实现一个Web服务来从Google Analytics检索数据。当我在本地计算机上尝试它时,它可以工作,但是当我将其发布到服务器时,我有一个例外。我在Google Analytics控制台上创建了一个项目,并将生成的client_secret json下载了。我在应用程序的根路径上上传了 json,并将 client_secret.json 文件的"生成操作"设置为"内容",并将"复制到输出目录"设置为"如果较新"则为"复制"。这是我执行身份验证的代码:

static async Task<UserCredential> GetCredential()
    {
        try
        {
            string jsonPath = HttpContext.Current.Server.MapPath("~/client_secret.json");
            HttpContext.Current.Response.Write(jsonPath);
            using (var stream = new FileStream(jsonPath, FileMode.Open, FileAccess.Read))
            {
                const string loginEmailAddress = "my@emailaddress.com";
                return await GoogleWebAuthorizationBroker.AuthorizeAsync(
                    GoogleClientSecrets.Load(stream).Secrets,
                    new[] { AnalyticsReportingService.Scope.Analytics },
                    loginEmailAddress, System.Threading.CancellationToken.None,
                    new FileDataStore("GoogleAnalyticsApiWebService")
                    );
            }
        }
        catch (Exception ex)
        {
            HttpContext.Current.Response.Write("n" + ex.Message);
            return null;
        }
    }

当我尝试在本地执行时,它可以正常工作,当我在服务器上发布并从UTL调用它时,我有一个例外:

对路径"GoogleAnalyticsApiWebService"的访问被拒绝。Google.Apis.Requests.RequestError 请求缺少所需的身份验证凭据。预期的 OAuth 2 访问令牌、登录 Cookie 或其他有效的身份验证凭据。

有人可以帮助我吗?谢谢

问题在于FileDataStore的访问权限。可能指定应用尝试在无权写入的位置创建和写入文件夹的相对路径。我更改了在不同位置的路径,我在变量路径文件数据存储中传递:

static async Task<UserCredential> GetCredential()
    {
        try
        {
            string jsonPath = System.Configuration.ConfigurationManager.AppSettings["VPJSON"].ToString() + "\client_secret.json";
            HttpContext.Current.Response.Write("JSON PATH: " + jsonPath);
            using (var stream = new FileStream(jsonPath, FileMode.Open, FileAccess.Read))
            {
                const string loginEmailAddress = "marketing@easyconsulting.com";
                HttpContext.Current.Response.Write("n EMAIL LOGIN: " + loginEmailAddress + "n");
                GoogleClientSecrets clientSecrets = GoogleClientSecrets.Load(stream);
                HttpContext.Current.Response.Write("n" + "CLIENT SECRET: " + clientSecrets.Secrets.ClientSecret + "n");
                HttpContext.Current.Response.Write("n" + "CLIENT ID: " + clientSecrets.Secrets.ClientId + "nn");
                string pathFileDataStore = "d:\GADataStore";
                FileDataStore ds = new FileDataStore(pathFileDataStore,true);
                HttpContext.Current.Response.Write("n" + "PATH FILE DATA STORE: " + ds.FolderPath + "n");

                return await GoogleWebAuthorizationBroker.AuthorizeAsync(
                    clientSecrets.Secrets,
                    new[] { AnalyticsReportingService.Scope.Analytics },
                    loginEmailAddress, System.Threading.CancellationToken.None,
                    ds
                    );
            }
        }
        catch (Exception ex)
        {
            HttpContext.Current.Response.Write("n" + "GetCredential() " + ex.Message);
            return null;
        }
    }

现在它创建了文件夹,但现在我遇到了不同的问题。它不会在文件夹中创建任何文件。当我调用 Web 服务的 URL 时,我有此异常:System.Web.HttpException:请求超时。

我想我解决了GoogleWebAuthorizationBroker.AuthorizeAsync的冻结问题,在此线程中由iedoc回答

相关内容

  • 没有找到相关文章

最新更新