更新日历事件给出错误“指定的值不是有效的引用字符串”

时间:2014-05-14 08:50:18

标签: google-calendar-api google-api-dotnet-client

截至今天,当我们尝试使用Google Calendar V3 API更新活动时,我们收到了错误消息。

这是我们的代码:

    string certificateFile = getCertificateFile();
    string certificatePassword = getCertificatePassword();
    string serviceAccountEmail = getServiceAccountEmail();

    X509Certificate2 certificate = new X509Certificate2(AppDomain.CurrentDomain.BaseDirectory + "certs//" + certificateFile, certificatePassword, X509KeyStorageFlags.Exportable);

    ServiceAccountCredential credential = new ServiceAccountCredential(
    new ServiceAccountCredential.Initializer(serviceAccountEmail)
    {
        Scopes = new[] { Google.Apis.Calendar.v3.CalendarService.Scope.Calendar },
        User = user
    }.FromCertificate(certificate));

    Google.Apis.Calendar.v3.CalendarService service = new Google.Apis.Calendar.v3.CalendarService(new BaseClientService.Initializer()
    {
        HttpClientInitializer = credential,
        ApplicationName = "Test",
    });

    try
    {
        Event evv = service.Events.Get(user, "6ebr4dp452m453n468movuntag").Execute();
        EventsResource.UpdateRequest ur = new EventsResource.UpdateRequest(service, evv, user, evv.Id);
        ur.Execute();
    }
    catch (Exception ex)
    {
        Response.Write(ex.Message);
    }

错误消息是"指定的值不是有效的带引号的字符串。 "

这是始终有效的基本代码。我们仍然可以查询和插入事件。由于某种原因,更新刚刚停止工作?

其他人得到这个吗?

2 个答案:

答案 0 :(得分:2)

我发现问题所在:Google API的ETag功能似乎已被打破。

为了解决这个问题,我必须从google-api-dotnet-client Downloads下载.NET Google API客户端库的源代码,并在ClientServiceRequest.cs的第189行注释对方法AddETag()的调用;该方法添加了当前导致问题的If-Match ETag标头。此文件位于GoogleApis项目中。

    public HttpRequestMessage CreateRequest(Nullable<bool> overrideGZipEnabled = null)
    {
        var builder = CreateBuilder();
        var request = builder.CreateRequest();
        object body = GetBody();
        request.SetRequestSerailizedContent(service, body, overrideGZipEnabled.HasValue
            ? overrideGZipEnabled.Value : service.GZipEnabled);

        //AddETag(request);
        return request;
    }

有关Google API如何使用ETag和If-Match标头的详细信息,请参阅Protocol Reference: Updating Entries

答案 1 :(得分:1)

Calendar API中的问题已修复,因此无需使用此解决方法!

请不要使用上述建议。虽然它有效但它实际上会消除库中etag的一个重要特征。可在以下位置找到更好的解决方案:https://codereview.appspot.com/96320045/

感谢diegog为你的解决方案,我很确定它帮助了今天被困的几个用户。