首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >亚马逊CloudFront在ASP.Net中的失效

亚马逊CloudFront在ASP.Net中的失效
EN

Stack Overflow用户
提问于 2010-09-03 10:57:24
回答 5查看 3.8K关注 0票数 4

我不确定如何使用ASP.Net向亚马逊CloudFront发送请求以使对象无效。

细节在这里http://docs.amazonwebservices.com/AmazonCloudFront/latest/DeveloperGuide/index.html?Invalidation.html,但我不确定如何在ASP.Net中实现这一点...有人能帮帮忙吗?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2012-11-17 04:31:51

自最新版本的AWS SDK for .NET (1.5.8.0)起,接受的答案不再有效。这应该能起到作用:

代码语言:javascript
代码运行次数:0
运行
复制
using Amazon;
using Amazon.CloudFront.Model;

..。

代码语言:javascript
代码运行次数:0
运行
复制
var client = AWSClientFactory.CreateAmazonCloudFrontClient(accessKey, secretKey);
client.CreateInvalidation(new CreateInvalidationRequest {
    DistributionId = distributionID,
    InvalidationBatch = new InvalidationBatch {
        Paths = new Paths {
            Quantity = arrayofpaths.Length,
            Items = arrayofpaths.ToList()
        },
        CallerReference = DateTime.Now.Ticks.ToString()
    }
});
票数 8
EN

Stack Overflow用户

发布于 2010-09-09 10:26:16

让它正常工作,如果其他人觉得它有用的话就在这里。

代码语言:javascript
代码运行次数:0
运行
复制
    public static void InvalidateContent(string distributionId, string fileName)
    {
        string httpDate = Helpers.GetHttpDate();

        ASCIIEncoding encoding = new ASCIIEncoding();
        string postData = @"<InvalidationBatch>" +
                            "   <Path>/" + fileName + "</Path>" +
                            "   <CallerReference>" + httpDate + "</CallerReference>" +
                            "</InvalidationBatch>";
        byte[] data = encoding.GetBytes(postData);

        // Prepare web request...
        HttpWebRequest webRequest = (HttpWebRequest)WebRequest.Create("https://cloudfront.amazonaws.com/2010-08-01/distribution/" + distributionId + "/invalidation");
        webRequest.Method = "POST";
        webRequest.ContentType = "text/xml";
        webRequest.Headers.Add("x-amz-date", httpDate);

        Encoding ae = new UTF8Encoding();
        HMACSHA1 signature = new HMACSHA1(ae.GetBytes(GlobalSettings.AWSSecretAccessKey.ToCharArray()));
        string b64 = Convert.ToBase64String(signature.ComputeHash(ae.GetBytes(webRequest.Headers["x-amz-date"].ToCharArray())));
        webRequest.Headers.Add(HttpRequestHeader.Authorization, "AWS" + " " + GlobalSettings.AWSAccessKeyId + ":" + b64);

        webRequest.ContentLength = data.Length;

        Stream newStream = webRequest.GetRequestStream();
        // Send the data.
        newStream.Write(data, 0, data.Length);
        newStream.Close();
    }

    /// <summary>
    /// Gets a proper HTTP date
    /// </summary>
    public static string GetHttpDate()
    {
        // Setting the Culture will ensure we get a proper HTTP Date.
        string date = System.DateTime.UtcNow.ToString("ddd, dd MMM yyyy HH:mm:ss ", System.Globalization.CultureInfo.InvariantCulture) + "GMT";
        return date;
    }
票数 7
EN

Stack Overflow用户

发布于 2010-09-18 06:46:08

这是上述代码的python版本,如果有人觉得有用的话

代码语言:javascript
代码运行次数:0
运行
复制
from datetime import datetime
import urllib2, base64, hmac, hashlib

def getHTTPDate():
    return datetime.utcnow().strftime("%a, %d %b %Y %H:%M:%S UTC")

def submitInvalidationRequest(fileName,distributionId):
    url = "https://cloudfront.amazonaws.com/2010-08-01/distribution/" + distributionId + "/invalidation"
    httpDate = getHTTPDate();
    postData = "<InvalidationBatch>" +"<Path>/" + fileName + "</Path>" +"<CallerReference>" + httpDate + "</CallerReference>" +"</InvalidationBatch>";
    sig = hmac.new(AWSSecretAccessKey, unicode(httpDate), hashlib.sha1)

    headers = {"ContentType": "text/xml",
           "x-amz-date": httpDate,
           "Authorization":"AWS " + AWSAccessKeyId + ":" +  base64.b64encode( sig.digest() )}

    req = urllib2.Request(url,postData,headers)
    return urllib2.urlopen(req).read()
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3632785

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档