Azure Table Storage
An Azure service that stores structured NoSQL data in the cloud.
156 questions
This browser is no longer supported.
Upgrade to Microsoft Edge to take advantage of the latest features, security updates, and technical support.
Error: "Server failed to authenticate the request. Make sure the value of Authorization header is formed correctly including the signature."
public async Task<string> UpdateEntityAsync(string department, string id, EmployeeDetails employee)
{
string storageAccount = "sample";
string resourcePath = "SampleAzureTableStorage";
string accessKey = "<Sample>";
string uri = @"https://" + storageAccount + ".table.core.windows.net/" + resourcePath + "(PartitionKey='" + department + "',RowKey='" + id + "')";
var request = _httpClientFactory.CreateClient();
request = getRequestHeadersPut("PUT", request, storageAccount, accessKey, resourcePath, department, id);
try
{
var httpResponseMessage = await request.PutAsync<EmployeeDetails>(uri, employee, new JsonMediaTypeFormatter());
if (httpResponseMessage.IsSuccessStatusCode)
{
return "Success";
}
return null;
}
catch (WebException ex)
{
throw ex;
}
}
public HttpClient getRequestHeadersPut(string requestType, HttpClient Newrequest, string storageAccount, string accessKey, string resource,string department, string id, int Length = 0)
{
HttpClient Client = Newrequest;
var RequestDateString = DateTime.UtcNow.ToString("R", CultureInfo.InvariantCulture);
if (Client.DefaultRequestHeaders.Contains("x-ms-date"))
Client.DefaultRequestHeaders.Remove("x-ms-date");
Client.DefaultRequestHeaders.Add("x-ms-date", RequestDateString);
var requestUri = @"https://" + storageAccount + ".table.core.windows.net/" + resource + "(PartitionKey='" + department + "',RowKey='" + id + "')";
Client.DefaultRequestHeaders.Accept.Clear();
Client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
if (Client.DefaultRequestHeaders.Contains("x-ms-version"))
Client.DefaultRequestHeaders.Remove("x-ms-version");
Client.DefaultRequestHeaders.Add("x-ms-version", "2015-12-11");
if (Client.DefaultRequestHeaders.Contains("DataServiceVersion"))
Client.DefaultRequestHeaders.Remove("DataServiceVersion");
Client.DefaultRequestHeaders.Add("DataServiceVersion", "3.0;NetFx");
if (Client.DefaultRequestHeaders.Contains("MaxDataServiceVersion"))
Client.DefaultRequestHeaders.Remove("MaxDataServiceVersion");
Client.DefaultRequestHeaders.Add("MaxDataServiceVersion", "3.0;NetFx");
if (Client.DefaultRequestHeaders.Contains("If-Match"))
Client.DefaultRequestHeaders.Remove("If-Match");
Client.DefaultRequestHeaders.Add("If-Match", "*");
if (Client.DefaultRequestHeaders.Contains("Authorization"))
Client.DefaultRequestHeaders.Remove("Authorization");
var sas = getAuthTokenPut(Client, storageAccount, accessKey, resource, department, id);
Client.DefaultRequestHeaders.TryAddWithoutValidation("Authorization", sas);
return Client;
}
public string getAuthTokenPut(HttpClient request, string storageAccount, string accessKey, string resource, string department, string id)
{
try
{
string sAuthTokn = "";
string stringToSign = DateTime.UtcNow.ToString("R", CultureInfo.InvariantCulture) + "\n";
stringToSign += "/" + storageAccount + "/" + resource + "(PartitionKey='" + department + "',RowKey='" + id + "')";
HMACSHA256 hasher = new HMACSHA256(Convert.FromBase64String(accessKey));
sAuthTokn = "SharedKeyLite " + storageAccount + ":" + Convert.ToBase64String(hasher.ComputeHash(Encoding.UTF8.GetBytes(stringToSign)));
return sAuthTokn;
}
catch (Exception ex)
{
throw ex;
}
}