Google Analytics V3 API不会在ASP MVC中执行请求

时间:2015-08-19 09:38:47

标签: asp.net-mvc request analytics

我想在ASP MVC项目中实施Google AnalyticsAPI v3。因为我从来没有这样做,所以我制作了一个示例控制台应用程序,我已经学会了如何使用这个API,这就是代码:

static void Main(string[] args)
    {
        var certByteArray = Properties.Resources.key;
        var serviceAccountEmail = "IdOfMyAccount@developer.gserviceaccount.com";
        var certificate = new X509Certificate2(certByteArray, "pswd", X509KeyStorageFlags.Exportable);

        ServiceAccountCredential credential = new ServiceAccountCredential(
           new ServiceAccountCredential.Initializer(serviceAccountEmail)
           {
               Scopes = new[] { AnalyticsService.Scope.Analytics }
           }.FromCertificate(certificate));

        var service = new AnalyticsService(new BaseClientService.Initializer()
            {
                HttpClientInitializer = credential,
            });

        var profileId = "ga:MyID";
        var startDate = DateTime.Now.AddDays(-7).ToShortDateString();
        var endDate = DateTime.Now.ToShortDateString();
        var metrics = "ga:visits,ga:pageviews,ga:users,ga:sessionDuration,ga:bounceRate";

        DataResource.GaResource.GetRequest request = service.Data.Ga.Get(profileId, startDate, endDate, metrics);
        request.Dimensions = "ga:country";
        GaData data = request.Execute();

        foreach (var row in data.Rows)
        {
            int i = 0;
            foreach (var h in data.ColumnHeaders)
            {
                Console.WriteLine(h.Name + "      " + row[i].ToString());
                // Here get the column name and its values
                i++;
            }
        }

        Console.ReadKey();
    }

在这个应用程序中一切正常,我很快得到了数据。当我尝试在MVC应用程序中使用此代码时,问题就开始了。在调试模式下,一切正常,直到

GaData data = request.Execute();

当我点击F10键前进时,似乎app正在运行,浏览器正在等待完成操作,但它没有发生。在这种情况下,根本不调用Application_Error方法。在这两个应用程序中,我都安装了相同的NuGet包。

任何人都知道为什么它不能在ASP MVC中工作?

1 个答案:

答案 0 :(得分:0)

经过几次尝试后,它开始使用请求时调用的ExecuteAsync方法。这是实际的代码,但我仍然不知道如何同步它。

public async Task<GaData> GetAnalysisData()
    {
        var certByteArray = Properties.Resources.key;
        var serviceAccountEmail = "MyId@developer.gserviceaccount.com";
        var certificate = new X509Certificate2(certByteArray, "notasecret", X509KeyStorageFlags.Exportable);

        ServiceAccountCredential credential = new ServiceAccountCredential(
           new ServiceAccountCredential.Initializer(serviceAccountEmail)
           {
               Scopes = new[] { AnalyticsService.Scope.Analytics }
           }.FromCertificate(certificate));

        var service = new AnalyticsService(new BaseClientService.Initializer()
        {
            HttpClientInitializer = credential,
        });

        var profileId = "ga:********";
        var startDate = DateTime.Now.AddDays(-7).ToShortDateString();
        var endDate = DateTime.Now.ToShortDateString();
        var metrics = "ga:visits,ga:pageviews,ga:users,ga:sessionDuration,ga:bounceRate";

        DataResource.GaResource.GetRequest request = service.Data.Ga.Get(profileId, startDate, endDate, metrics);
        request.Dimensions = "ga:country";
        var data = await request.ExecuteAsync();

        return data;
    }