Authentication 如何在使用RESTAPI删除Azure中的表实体时使用空格对参数进行编码';s

Authentication 如何在使用RESTAPI删除Azure中的表实体时使用空格对参数进行编码';s,authentication,azure-table-storage,Authentication,Azure Table Storage,我有一些代码可以在WindowsAzure中使用RESTAPI从表中添加和删除实体。如果我添加了一个具有PartitionKey“abcd”和RowKey“efgh”的实体,然后将其删除,则效果良好。删除操作的相对URL为 devstoreaccount1/TableX(PartitionKey='abcd',RowKey='efgh') 这用于创建身份验证头,因此签名字符串的规范化资源是 /devstoreaccount1/devstoreaccount1/TableX(PartitionK

我有一些代码可以在WindowsAzure中使用RESTAPI从表中添加和删除实体。如果我添加了一个具有PartitionKey“abcd”和RowKey“efgh”的实体,然后将其删除,则效果良好。删除操作的相对URL为

devstoreaccount1/TableX(PartitionKey='abcd',RowKey='efgh')
这用于创建身份验证头,因此签名字符串的规范化资源是

/devstoreaccount1/devstoreaccount1/TableX(PartitionKey='abcd',RowKey='efgh')
一切都很好,一切都很好。接下来,我插入另一个具有分区键'abcdd'和行键'efghh'的实体(即,添加了空格)。实体插入很好。当我试图删除它时,我创建了带有空格的uri,我的请求得到了一个错误代码为403的响应。基本上,请求没有进行身份验证。我要解决这个问题的下一步是通过调用HttpUtility.PathEncodeUrl(partitionKey)和rowKey来更改值。所以规范化资源现在是

/devstoreaccount1/devstoreaccount1/TableX(PartitionKey='a%20b%20c%20d',RowKey='e%20f%20g%20h')
当我发出这样的请求时,我得到一个错误代码为404(未找到)的响应。这意味着,很明显,身份验证已经通过,但在内部,调用处理程序似乎忘记了在搜索实体密钥时将%20转换回空格

好的,在这长时间的描述之后,我的两个问题是: 1) 对空间进行编码,使其通过身份验证,并找到要删除的实体的正确方法是什么? 2) 如果其中一个参数包含一个引号,那么在字符串中对其进行编码的正确方法是什么

我更喜欢使用RESTAPI,所以请不要告诉我使用TableServiceContext类


提前感谢你的帮助。最后一个注意事项:MSDN中有关此主题的文档(http://msdn.microsoft.com/en-us/library/windowsazure/dd135727.aspx)这是不正确的。它表明参数应该以双引号而不是单引号发送。如果执行此操作,则响应为403(禁止访问)。我花了一段时间才弄明白这一点。

谢谢你的建议,斯马尔克斯。和往常一样,“问题越简单,解决起来就越难”。我需要打电话

fullPathUri = HttpUtility.UrlPathEncode(fullPathUri);

对于创建HttpWebRequest时使用的参数,然后一切正常。至于单引号,它们需要用两个单引号替换(例如,从谁在那里谁在那里

找出这些内容的最简单方法通常是在Fiddler中查看您最喜欢的工具(或.NET存储客户端库)发出的请求,然后模仿它们。只需添加和删除一个分区/行键中带有空格的对象,然后查看它在连线上的外观。