c# - 通过 REST API 将 JSON 发布到 DocumentDB

标签 c# json azure restsharp azure-cosmosdb

刚刚从 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 状态代码(错误请求)响应。我尝试序列化该对象,并将restRequest.AddBody 替换为restRequest.AddParameter("application/json; charset=utf-8",json,ParameterType.RequestBody)。这没有任何影响。

最佳答案

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

假设您确实想让 REST API 正常工作...快速浏览一下,我发现有一些需要更改的内容:

1.) 授权 key 看起来已关闭。

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

您需要生成哈希签名,而不是传递主 key 。您可以找到documentation on auth here.

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

关于c# - 通过 REST API 将 JSON 发布到 DocumentDB,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33359826/

相关文章:

c# - 当表的数据源动态变化时更新 Xamarin iOS 中的 UITableView

c# - Directory.GetDirectories 抛出异常

java - Java Servlet中Json字符串解析并插入数据库

azure - 对Windows azure服务器进行镜像备份

c# - SubscriptionClient.RecieveBatch 未检索所有代理消息

c# - 如何防止在本地缓存 PDF?

c# - 仅获取此节点的 InnerText,不包括子节点

php - 在 PHP 中编码 JSON 时,从数据库中选择的 JSON 字符串最终格式错误

Java解析url错误

azure - Azure 流量管理器可以根据 SSL 版本重定向客户端吗?