簡體   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