更新日历事件给出错误"The specified value is not a valid quoted string"



截至今天,当我们尝试使用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);
    }

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

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

还有人明白吗?

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

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

    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如何使用ETags和If-Match报头的更多信息,请参阅协议参考:更新条目。

日历API中的问题已修复,因此不需要使用此解决方案!

请不要使用上述建议。虽然它可以工作,但它实际上会消除库中etag的一个重要特性。一个更好的解决方案可以在:https://codereview.appspot.com/96320045/

感谢diegog的解决方法,我敢肯定它帮助了今天被卡住的几个用户。

最新更新