【问题标题】:You must provide a request body if you set ContentLength>0 or SendChunked==true. Do this by calling [Begin]GetRequestStream before [Begin]GetResponse如果设置 ContentLength>0 或 SendChunked==true,则必须提供请求正文。通过在 [Begin]GetResponse 之前调用 [Begin]GetRequestStream 来执行此操作
【发布时间】:2018-07-31 13:36:53
【问题描述】:

我尝试在 oracle 云基础架构 iaas 上上传文件但收到错误。我不确定我附加在正文中的文件是否在 格式是否正确。 ApI 签名是正确的,我只是怀疑 我写的代码是否符合要求。代码 sn-p 如下所述。 代码片段:

            FileInfo f = new FileInfo(FileUpload1.FileName);
            byte[] filebyte =FileUpload1.FileBytes;

            var postdata = Encoding.UTF8.GetBytes(filebyte.ToString());
        Console.Write(postdata.Length);

            var tenancyId = ConfigurationManager.AppSettings["BMCTenancyId"];
            var userId = ConfigurationManager.AppSettings["BMCUserId"];
            var fingerprint = ConfigurationManager.AppSettings["BMCFingerprint"];
            var privateKeyPath = ConfigurationManager.AppSettings["BMCPrivateKeyPath"];
            var privateKeyPassphrase = ConfigurationManager.AppSettings["BMCPrivateKeyPassphrase"];

            var signer = new RequestSigner(tenancyId, userId, fingerprint, privateKeyPath, privateKeyPassphrase);

            ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;

            var uri = new Uri($"https://objectstorage.us-phoenix-1.oraclecloud.com/");

            var request = (HttpWebRequest)WebRequest.Create(uri);
            request.Method = "POST";
            request.Accept = "application/json";
            request.SendChunked = true;
            request.ContentType = "text/plain";

            request.ContentLength =postdata.Length;
        try
        {
            using (var stream = request.GetRequestStream())
            {
                stream.Write(postdata, 0, postdata.Length);
                stream.Close();
            }
        }
        catch(Exception ex)
        {
            Response.Write(ex.Message);

        }



            request.Headers["x-content-sha256"] = Convert.ToBase64String(SHA256.Create().ComputeHash(postdata));

            signer.SignRequest(request);

            Console.WriteLine($"Authorization header: {request.Headers["authorization"]}");

            ExecuteRequest(request);

            Console.WriteLine("The value of 'ContentLength' property after sending the data is {0}", request.ContentLength);
    }

        private static void ExecuteRequest(HttpWebRequest request)
        {
            try
            {
                var webResponse = (HttpWebResponse)request.GetResponse();
                var response = new StreamReader(webResponse.GetResponseStream()).ReadToEnd();
                Console.WriteLine($"Response: {response}");
            }
            catch (WebException e)
            {
                Console.WriteLine($"Exception occurred: {e.Message}");
                Console.WriteLine($"Response: {new StreamReader(e.Response.GetResponseStream()).ReadToEnd()}");
            }
        }

【问题讨论】:

    标签: asp.net oracle-cloud-infrastructure


    【解决方案1】:

    一方面,您需要将 URL 更新为以下格式:

    var uri = new Uri($"https://objectstorage.us-phoenix-1.oraclecloud.com/n/{namespaceName}/b/{bucketName}/o/{objectName}");
    

    文档:https://docs.cloud.oracle.com/iaas/api/#/en/objectstorage/20160918/Object/PutObject

    另外,您能否编辑问题以包含您收到的完整错误,这将有助于调试。

    【讨论】:

      猜你喜欢
      • 2013-09-06
      • 2015-09-26
      • 2019-06-02
      • 1970-01-01
      • 2011-06-17
      • 1970-01-01
      • 1970-01-01
      • 2015-03-23
      • 1970-01-01
      相关资源
      最近更新 更多