我有一个用C#编写的函数(WebForms代码隐藏),它可以创建一个指向存储在Amazon S3云服务器上的图像的URL(代码如下所示)。当我在开发系统上运行它时,它工作正常,但当我在生产.NET Web服务器上运行它时,它失败了(指向图像文件的URL只会导致网页上出现一个破碎的图像图标)。
URL的似乎是相同的,在每种情况下,除了:1)在dev机器上,URL包含正斜杠(但其他特殊字符被转义),在生产机器上,正斜杠被转义(%5C)2)签名不同(如我所料)
当我将URL从生产机器复制并粘贴到本地浏览器时,它不起作用,但我认为这是因为它在签名中包含了计算URL的机器的一些ID。
为什么完全相同的代码在一台机器上可以工作,而在另一台机器上却不行?
public string CalculateURL
{
// build a url with the AWS credentials to get the file from the Amazon S3 cloud storage
get
{
string secretKey = "secretkeygoeshere";
string accessKey = "accesskeygoeshere";
string url = "";
BasicAWSCredentials awsCredentials = new BasicAWSCredentials(accessKey, secretKey);
AmazonS3Config asConfig = new AmazonS3Config()
{
ServiceURL = "s3.amazonaws.com",
RegionEndpoint = Amazon.RegionEndpoint.USEast1
};
s3 = new AmazonS3Client(awsCredentials, asConfig);
GetPreSignedUrlRequest preSignedURLreq = new GetPreSignedUrlRequest() { Key = relative_path, BucketName = "my-bucket-name", Expires = DateTime.Now.AddHours(12) };
url = s3.GetPreSignedURL(preSignedURLreq);
return url;
}
}
1条答案
按热度按时间anhgbhbe1#
多亏了其中一篇评论中的一个建议,我发现了问题:结果发现,prod数据库中有使用反斜杠的旧数据,而我的计算机上的development数据库中有正斜杠,当我用dev数据更新prod表时,所有数据都神奇地开始工作了。