在获取 Amazon S3 存储桶中某物的 URL 时,它可以在末尾附加一个签名以确认用户有权查看该对象,并且该 URL 如下所示:
https://mybucket.amazonaws.com/mykey?AWSAccessKeyId=myaccesskey& Expires=1235241261&Signature= t5vFBWXaN0DvVaWfck9n2%2fmTzOU%3d
这些 URL 作为字符串对象从我的 S3 库中返回,我就这样传递它们。最近我通过 FxCop 运行我的代码,它建议我使用Uri
该类来传递 URL。我接受了 FxCops 的建议并将我的 URLstring
属性更改为Uri
属性。一切似乎都运行良好,直到很久以后我才注意到并非所有对象都被成功取回。
问题的原因是Uri
类ToString()
函数会返回一个稍微不同版本的 URL:
https://mybucket.amazonaws.com/mykey?AWSAccessKeyId=myaccesskey& Expires=1235241261&Signature= t5vFBWXaN0DvVaWfck9n2/mTzOU=
我的解决方案是使用类的OriginalString
属性Uri
。但是对此感觉有些不对劲,我有两个问题,
- 我应该接受 FxCops 的建议并使用
Uri
课程吗? - 亚马逊是否应该意识到 URL 可能会经过许多人的手,而不是依赖于它们以完全相同的方式返回?
对于使用 .Net Uri 类,我可以确定我的 URL 始终有效,但它似乎会导致更微妙的错误。