5

我正在尝试使 C#/.NET 中的 CloudFront 对象无效并获取以下异常:

您的请求包含一个或多个无效的失效路径。

我的功能:

public bool InvalidateFiles(string[] arrayofpaths)
{
    for (int i = 0; i < arrayofpaths.Length; i++)
    {
        arrayofpaths[i] = Uri.EscapeUriString(arrayofpaths[i]);
    }

    try
    {
        Amazon.CloudFront.AmazonCloudFrontClient oClient = new Amazon.CloudFront.AmazonCloudFrontClient(MY_AWS_ACCESS_KEY_ID, MY_AWS_SECRET_KEY, Amazon.RegionEndpoint.USEast1);
        CreateInvalidationRequest oRequest = new CreateInvalidationRequest();
        oRequest.DistributionId = ConfigurationManager.AppSettings["CloudFrontDistributionId"];
        oRequest.InvalidationBatch = new InvalidationBatch
        {
            CallerReference = DateTime.Now.Ticks.ToString(),
            Paths = new Paths
            {
                Items = arrayofpaths.ToList<string>(),
                Quantity = arrayofpaths.Length
            }
        };

        CreateInvalidationResponse oResponse = oClient.CreateInvalidation(oRequest);
        oClient.Dispose();
    }
    catch
    {
        return false;
    }
    return true;
}

传递给函数的数组包含一个 Url,如下所示:

images/temp_image.jpg

该图像存在于 S3 存储桶中,并在 CloudFront URL 中加载到浏览器中。

我究竟做错了什么?

4

3 回答 3

4

您的无效文件路径需要 / 在字符串的前面。

如果您有疑问,您可以登录 AWS 管理,转到 Cloudfront,选择您尝试使文件无效的分发,选择分发设置并转到无效选项卡。

然后,您可以手动创建验证,这使您可以检查您的路径是否正确。

于 2017-07-19T12:22:40.080 回答
2

当您向 CloudFront 中的某个对象发送失效请求时,即使失效已完成,您仍然可以在浏览器中的 CloudFront URL 中看到您的图片,因为失效不会从 S3 存储桶中删除对象,并且再次从您的浏览器 CloudFront 对该图像的新请求将这些 URl 缓存到边缘位置的 images/temp_image.jpg。

当您更新具有相同名称的图像时,将看到对象无效。

您的无效功能是正确的。

于 2014-10-08T16:44:10.937 回答
2

您是否尝试在路径的开头添加正斜杠?(/images/temp_image.jpg)

于 2016-02-06T08:57:44.707 回答