繁体   English   中英

通过REST API将JSON发布到DocumentDB

[英]Posting JSON to DocumentDB through REST API

刚刚从Sql Server过渡到Microsoft的DocumentDB服务,我正在努力通过他们的REST API( https://msdn.microsoft.com/en-us/library/azure/dn803948.aspx )创建一个文档。 我试过RestSharp和WebClient没有运气。 我确信这可能是一个简单的疏忽。 下面的代码有一个Account对象,只有所需的属性(id)...只是为了测试。 任何帮助都会很棒。

public class Account
{
    public string id { get; set; }

}

////////////////////////////////////

  Account customerAcc = new Account
    {
        id = "test1"

    };

////////////////////////////////////////////

 var baseUrl = Environment.GetEnvironmentVariable("APPSETTING_documentDB_endpoint");
 var primary_key = Environment.GetEnvironmentVariable("APPSETTING_documentDB_primary_key");
 var client = new RestClient(baseUrl);
 var data = "type=master&ver=1.0&sig=" + primary_key;

 RestRequest restRequest = new RestRequest(Method.POST);
 restRequest.RequestFormat = DataFormat.Json;
 restRequest.AddHeader("Authorization", data);
 restRequest.AddHeader("x-ms-date",now.ToUniversalTime().ToString());
 restRequest.AddBody(customerAcc);

 IRestResponse irestResponse = client.Execute(restRequest);


 ///////////////////////////////////// OR WITH SYSTEM.NET.WEBCLIENT
  string result = "";
  using (var newClient = new System.Net.WebClient())
        {
            newClient.Headers[System.Net.HttpRequestHeader.ContentType] = "application/json";
            newClient.Headers["Authorization"] = data;
            newClient.Headers["x-ms-date"] = now.ToUniversalTime().ToString();
            result = newClient.UploadString(baseUrl, "POST", "{\"id\":\"test1\"}");
        }

呼叫已获得授权,但继续获得400状态代码(BAD REQUEST)响应。 我已经尝试序列化该对象,并用restRequest.AddParameter(“application / json; charset = utf-8”,json,ParameterType.RequestBody)替换restRequest.AddBody。 这没有任何影响。

如果您尝试在.NET应用程序中使用Azure DocumentDB,您可能会发现简单地使用.NET SDK更容易。

假设你真的想让REST API工作......简单一瞥,我看到一些需要改变的事情:

1.)auth键关闭。

 var primary_key = Environment.GetEnvironmentVariable("APPSETTING_documentDB_primary_key");
 // ...
 var data = "type=master&ver=1.0&sig=" + primary_key;
 // ...
 restRequest.AddHeader("Authorization", data);

您需要生成散列签名,而不是传入主密钥。 您可以在此处找到有关auth的文档。

2.)发送POST请求的URI看起来有点偏。

var baseUrl = Environment.GetEnvironmentVariable("APPSETTING_documentDB_endpoint");
// ...
result = newClient.UploadString(baseUrl, "POST", "{\"id\":\"test1\"}");

您需要根据您尝试操作的资源构建URI。 例如,用于创建文档的URI应如下所示:

https://{databaseaccount}.documents.azure.com/dbs/{_rid-db}/colls/{_rid-col}/docs

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM