Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何获得一个预先签名的URL来列出一个bucket';什么内容?_C#_Amazon S3 - Fatal编程技术网

C# 如何获得一个预先签名的URL来列出一个bucket';什么内容?

C# 如何获得一个预先签名的URL来列出一个bucket';什么内容?,c#,amazon-s3,C#,Amazon S3,这是我正在处理的示例项目。 特别是PresignedUrlSample类 [ 问题是,当传入表示我的bucket中的文件的对象密钥时,该方法有效,但传入时不起作用: “/?前缀=前缀&最大键数=50” 错误是,“我们计算的请求签名与您提供的签名不匹配。” 有文件表明,这应该在所有地方都是可能的,但我在整个互联网上找不到一个例子,说明如何使用?prefix=参数语法实际创建一个预先签名的URL来列出一个bucket的内容 有趣的是,如果我只为键传递一个正斜杠,我可以列出整个bucket,但显然这根

这是我正在处理的示例项目。 特别是PresignedUrlSample类

[

问题是,当传入表示我的bucket中的文件的对象密钥时,该方法有效,但传入时不起作用:

“/?前缀=前缀&最大键数=50”

错误是,“我们计算的请求签名与您提供的签名不匹配。”

有文件表明,这应该在所有地方都是可能的,但我在整个互联网上找不到一个例子,说明如何使用?prefix=参数语法实际创建一个预先签名的URL来列出一个bucket的内容

有趣的是,如果我只为键传递一个正斜杠,我可以列出整个bucket,但显然这根本不是一个解决方案。prefix参数使这一点可行,但也导致Amazon Signature 4 C#示例项目出现问题

这是我找到的文档,其中明确说明可以创建预签名URL来列出整个或部分bucket。所以问题是为什么它不能计算正确的签名

GET /?prefix=photos&max-keys=50&marker=puppy HTTP/1.1
User-Agent: Mozilla/5.0
Host: johnsmith.s3.amazonaws.com
Date: Tue, 27 Mar 2007 19:42:41 +0000

Authorization: AWS AKIAIOSFODNN7EXAMPLE:
htDYFYduRNen8P9ZfE/s9SuKy0U=
请注意,我必须修改该示例,因为开发人员硬编码url以使用“?”作为第一个“amz-”参数,但因为?prefix=已经使用问号来参数化url,我必须将Amazon查询验证参数更改为全部使用符号

感谢所有想深入研究教授问题的人

更新:这是我的解决方案。 //这来自示例项目PresignedUrlSample.cs类

首先向上面类中的Run()静态方法添加两个新参数。一个是前缀值,另一个是max keys值

queryParams.AppendFormat("{0}={1}", AWS4SignerBase.X_Amz_Expires, HttpHelpers.UrlEncode(period.ToString()));
//在这一行下面添加以下两行代码

//我将这两行代码添加到本文顶部链接到的示例项目中。只需传递MyPrefix和MaxKeys值,就可以开始了

   queryParams.AppendFormat("{0}={1}", "&prefix", MyPrefix);
    queryParams.AppendFormat("{0}={1}", "&max-keys", MaxKeys);

我希望这能帮助一些人,因为这让我一整天都发疯。一旦我通过调试他们的代码理解了问题,解决方案就非常简单了。甚至不需要阅读密集的Amazon Signature 4文档,除非那是你的包。:D

请注意,我必须修改示例…你能澄清这一点吗?还有,也许,包括您正在使用的确切代码?我怀疑有一个解决方案,虽然我还不能说它可能是什么,因为我自己编写了所有代码(没有sdk)直接与REST接口对话…原因很多,其中最重要的一个原因是,为了获得正确的结果,您需要尝试找出sdk在某些情况下希望您传递的内容。为可能遇到相同问题的任何人找到答案。诀窍是不要在示例项目中传递?prefix=,在该示例项目中pects是一个键。而是创建两个新参数。sPrefix和sMaxKeys。然后简单地将这些参数添加到示例中的参数集合中。这就像一个符咒。