我在c#(WebForms代码隐藏)中有一个函数,它创建了一个存储在Amazon S3云服务器上的图像的URL(代码如下所示)。当我在我的开发系统上运行它时工作正常,但是当我在生产的.NET Web服务器上运行它时,它失败了(我的图像文件的URL只会导致网页上的图像图标损坏)。
在每种情况下,URL似乎都相同,除了: 1)在开发机器上,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;
}
}
答案 0 :(得分:0)
感谢其中一条评论中的建议,我发现了问题:结果是,prod数据库中的旧数据使用了反斜杠,而我计算机上的开发数据库有正斜杠。当我用dev数据更新prod表时,所有人都神奇地开始工作。