我想在Azure上的Blob存储中更新json文件,而WebClient.uploadData(url,data)
则会出错:
远程服务器返回错误:(405)资源不支持指定的Http Verb ..
代码如下:
[Route("PostJsonData")]
[HttpPost]
public void PostJSONData(string value)
{
try
{
string url = @"https://apkupdates.blob.core.windows.net/polaadapk/keywords.json";
byte[] json1 = new WebClient().DownloadData(url);
string result = System.Text.Encoding.UTF8.GetString(json1);
byte[] array = System.Text.Encoding.ASCII.GetBytes(value);
WebClient myWebClient = new WebClient();
Stream postStream = myWebClient.OpenWrite(url, "POST");
postStream.Write(array, 0, array.Length);
myWebClient.UploadData(url, array);
postStream.Close();
}
catch (Exception ex)
{
throw ex;
}
}
答案 0 :(得分:1)
上传的正确HTTP动词是blob PUT
而不是POST
。由于您使用的是POST
而不是PUT
,因此您会收到此错误。
请更改以下代码行:
Stream postStream = myWebClient.OpenWrite(url, "POST");
到
Stream postStream = myWebClient.OpenWrite(url, "PUT");
你不应该得到这个MethodNotAllowed (405)
错误。请注意,您可能会收到403错误,因为请求未经过身份验证。我建议您在继续之前阅读Storage Service REST API
文档。
答案 1 :(得分:1)
正如Gaurav已经提到的,你使用的是错误的动词。但是,我强烈建议使用现有的 SDK for .NET:
SDK还实现了一个指数重试策略来手动暂时性错误(503 - Service Unavailble),否则你必须自己实现。