Note that there are some explanatory texts on larger screens.

plurals
  1. POAzure Rest API Delete Message from Queue returning 403 (working ok in others method)
    primarykey
    data
    text
    <p>I just code 4 methods for API REST, but the last I need is not working. This is deleting the message queue. I have this code:</p> <pre><code>public static string DeleteMessage(String queueName, string account, byte[] key, string endpoint, string popreceipt,string messageid) { string requestMethod = "DELETE"; String urlPath = String.Format("{0}/messages/{1}?popreceipt={2}", queueName,Uri.EscapeDataString(messageid),Uri.EscapeDataString(popreceipt)); String storageServiceVersion = "2009-09-19"; String dateInRfc1123Format = DateTime.UtcNow.ToString("R", CultureInfo.InvariantCulture); String canonicalizedHeaders = String.Format( "x-ms-date:{0}\nx-ms-version:{1}", dateInRfc1123Format, storageServiceVersion); String canonicalizedResource = String.Format("/{0}/{1}", account, urlPath); //String canonicalizedResource = String.Format("/{0}/{1}\npopreceipt:{2}", account, urlPath, popreceipt); String stringToSign = String.Format( "{0}\n\n\n\n\n\n\n\n\n\n\n\n{1}\n{2}", requestMethod, canonicalizedHeaders, canonicalizedResource); String authorizationHeader = CreateAuthorizationHeader(stringToSign, account, key); Uri uri = new Uri(endpoint + urlPath); HttpWebRequest request = (HttpWebRequest)WebRequest.Create(uri); request.Method = requestMethod; request.Headers.Add("x-ms-date", dateInRfc1123Format); request.Headers.Add("x-ms-version", storageServiceVersion); request.Headers.Add("Authorization", authorizationHeader); using (HttpWebResponse response = (HttpWebResponse)request.GetResponse()) { Stream dataStream = response.GetResponseStream(); return response.StatusCode.ToString(); } } public static string GetMessage(String queueName,string account, byte[] key,string endpoint) { string requestMethod = "GET"; String urlPath = String.Format("{0}/messages", queueName); String storageServiceVersion = "2009-09-19"; String dateInRfc1123Format = DateTime.UtcNow.ToString("R", CultureInfo.InvariantCulture); String canonicalizedHeaders = String.Format( "x-ms-date:{0}\nx-ms-version:{1}", dateInRfc1123Format, storageServiceVersion ); String canonicalizedResource = String.Format("/{0}/{1}", account, urlPath); String stringToSign = String.Format( "{0}\n\n\n\n\n\n\n\n\n\n\n\n{1}\n{2}", requestMethod, canonicalizedHeaders, canonicalizedResource); String authorizationHeader = CreateAuthorizationHeader(stringToSign,account,key); Uri uri = new Uri(endpoint + urlPath); HttpWebRequest request = (HttpWebRequest)WebRequest.Create(uri); request.Method = requestMethod; request.Headers.Add("x-ms-date", dateInRfc1123Format); request.Headers.Add("x-ms-version", storageServiceVersion ); request.Headers.Add("Authorization", authorizationHeader); request.Accept = "application/atom+xml,application/xml"; using (HttpWebResponse response = (HttpWebResponse)request.GetResponse()) { Stream dataStream = response.GetResponseStream(); using (StreamReader reader = new StreamReader(dataStream)) { String responseFromServer = reader.ReadToEnd(); return responseFromServer; } } } </code></pre> <p>GetMessage is just working and DeleteMessage is not working, the CreateAuthorithation Headers Code is :</p> <pre><code> private static String CreateAuthorizationHeader(String canonicalizedString, string account, byte[] key) { String signature = string.Empty; using (HMACSHA256 hmacSha256 = new HMACSHA256(key)) { Byte[] dataToHmac = System.Text.Encoding.UTF8.GetBytes(canonicalizedString); signature = Convert.ToBase64String(hmacSha256.ComputeHash(dataToHmac)); } String authorizationHeader = String.Format( CultureInfo.InvariantCulture, "{0} {1}:{2}", "SharedKey", account, signature); return authorizationHeader; } </code></pre> <p>I pass the KEY using "Convert.FromBase64String(AccountSharedKey)", that works for GetMessage (and also another method for put message), but this is not working for DELETING THE MESSAGE.</p> <p>I see the API in MSDN and DELETE and GET message use the same parameters, except the parameters passed by the query string.</p> <p>SOLVED</p> <p>The problem was that I din´t use UriEscape for the parameters in the Uri string, and sometimes the URL was valid and sometimes not.</p>
    singulars
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload