远程服务器返回错误:(405)资源不支持指定的Http Verb

时间:2018-02-08 13:26:12

标签: azure asp.net-core

我想在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;
        }

    }

2 个答案:

答案 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:

Azure Storage APIs for .NET

SDK还实现了一个指数重试策略来手动暂时性错误(503 - Service Unavailble),否则你必须自己实现。