- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
向我的开发者同事们问好,
我已经花了 3 天努力连接到 Cosmos DB,但没有成功。
我使用 Retrofit 作为我的 REST 客户端,并使用 GsonConverterFactory 进行序列化/反序列化。
当前状态是我从 Cosmos DB REST API 收到 HTTP:400(错误请求)。我尝试采用 this SO answer 生成的身份验证 header
这是我的代码(此单元测试可以从您的开发环境运行。请参阅本文底部的 gradle.build
行来运行它):
@RunWith(AndroidJUnit4.class)
@MediumTest
public class AzureDbConnectionTests {
public static final int COSMOS_PORT_NUM = 443;
public static final String COSMOS_DB_URL = "https://mazedb.documents.azure.com";
public static final String CONNECTION_STR =
COSMOS_DB_URL + ":" + COSMOS_PORT_NUM;
public static final String PRIMARY_KEY =
"<Private Key>";
// Entity to serialize into Cosmos DB
public static class Building {
public Building() {}
private String mName;
private String mAddress;
private String id;
}
public interface FirstAzureService {
@POST("/dbs/mazedb/colls/buildings/docs")
Call<Building> addDocument(
@Header("authorization") String authorization,
@Header("x-ms-date") String date,
@Body Building building);
}
@Test
public void serverConnectionTest() throws Exception {
String headerDate = getDateString();
Building building = new Building();
building.mName = "UUID";
building.id = UUID.randomUUID().toString();
Retrofit retrofit = new Retrofit.Builder().baseUrl(CONNECTION_STR)
.addConverterFactory(GsonConverterFactory.create()).build();
FirstAzureService azureService = retrofit.create(FirstAzureService.class);
Call<Building> buildingCall = azureService.addDocument(
generateAuthHeader("post", "docs", "dbs/mazedb/colls/buildings",
headerDate, PRIMARY_KEY), headerDate, building);
Response<Building> response = buildingCall.execute();
Log.d("AzureDbConnectionTest", "HTTP status code: " + response.code());
Log.d("AzureDbConnectionTest", "HTTP message: " + response.message());
Log.d("AzureDbConnectionTest", headerDate);
assertTrue(response.isSuccessful());
}
private String generateAuthHeader(String verb, String resourceType, String resourceId, String headerDate, String masterKeyBase64) throws Exception
{
//Decode the master key, and setup the MAC object for signing.
byte[] masterKeyBytes = Base64.decode(PRIMARY_KEY, Base64.NO_WRAP);
Mac mac = Mac.getInstance("HMACSHA256");
mac.init(new SecretKeySpec(masterKeyBytes, "HMACSHA256"));
//Build the unsigned auth string.
String stringToSign = verb.toLowerCase() + "\n"
+ resourceType.toLowerCase() + "\n"
+ resourceId.toLowerCase() + "\n"
+ headerDate.toLowerCase() + "\n"
+ "\n";
//Sign and encode the auth string.
String signature = Base64.encodeToString(
mac.doFinal(stringToSign.toLowerCase().getBytes("UTF8")), Base64.NO_WRAP);
//Generate the auth header.
String authHeader =
URLEncoder.encode("type=master&ver=1.0&sig=" + signature, "UTF8");
return authHeader;
}
@NonNull
public static String getDateString() {
SimpleDateFormat formatter =
new SimpleDateFormat("EEE, dd MMM yyyy HH:mm:ss 'GMT'", Locale.US);
formatter.setTimeZone(TimeZone.getTimeZone("GMT"));
return formatter.format(new Date()).toLowerCase();
}
}
该 API 是 SQL API。 Azure 仪表板上显示的数据库数据: db structure
我还尝试寻找一些可用的 Android 版 Cosmos DB 客户端,以节省处理身份验证和其他操作的时间。但只能找到这个:https://github.com/Azure/Azure.Android 。这正是我正在寻找的,但它仍在开发中并且缺少 MongoDB API(我认为使用 MongoDB API 可以更轻松地进行切换,如果它会出现的话)。
非常感谢您的帮助!我已经厌倦了这个。
附注可以找到 Azure Cosmos DB 的 HTTP 状态代码列表 on official website 。代码 400 的原因是:
我认为最有可能的是错误的 JSON,但在另一个单元测试中序列化同一对象后,我发现它没问题: {“id”:“cceb3f5d-8d9c-44cd-85ee-599cd2f58783”,“mName”:“UUID”}
最诚挚的问候,格雷格。
build.gradle
运行它:
dependencies {
androidTestCompile "junit:junit:4.12"
androidTestCompile "com.android.support:support-annotations:25.3.1"
androidTestCompile "com.android.support.test:runner:0.5"
androidTestCompile "com.android.support.test:rules:0.5"
androidTestCompile "com.google.code.gson:gson:2.8.2"
androidTestCompile "com.squareup.retrofit2:retrofit:2.4.0"
androidTestCompile "com.squareup.retrofit2:converter-gson:2.4.0"
}
最佳答案
在generateAuthHeader
方法中,您提供dbs/mazedb/colls/buildings
作为String resourceId
,它是集合ID。这是错误的。
您应该将其更改为建筑物
。
关于android - Azure Cosmos DB - 错误请求 - http :400,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49943653/
我已经使用 vue-cli 两个星期了,直到今天一切正常。我在本地建立这个项目。 https://drive.google.com/open?id=0BwGw1zyyKjW7S3RYWXRaX24tQ
您好,我正在尝试使用 python 库 pytesseract 从图像中提取文本。请找到代码: from PIL import Image from pytesseract import image_
我的错误 /usr/bin/ld: errno: TLS definition in /lib/libc.so.6 section .tbss mismatches non-TLS reference
我已经训练了一个模型,我正在尝试使用 predict函数但它返回以下错误。 Error in contrasts<-(*tmp*, value = contr.funs[1 + isOF[nn]])
根据Microsoft DataConnectors的信息我想通过 this ODBC driver 创建一个从 PowerBi 到 PostgreSQL 的连接器使用直接查询。我重用了 Micros
我已经为 SoundManagement 创建了一个包,其中有一个扩展 MediaPlayer 的类。我希望全局控制这个变量。这是我的代码: package soundmanagement; impo
我在Heroku上部署了一个应用程序。我正在使用免费服务。 我经常收到以下错误消息。 PG::Error: ERROR: out of memory 如果刷新浏览器,就可以了。但是随后,它又随机发生
我正在运行 LAMP 服务器,这个 .htaccess 给我一个 500 错误。其作用是过滤关键字并重定向到相应的域名。 Options +FollowSymLinks RewriteEngine
我有两个驱动器 A 和 B。使用 python 脚本,我在“A”驱动器中创建一些文件,并运行 powerscript,该脚本以 1 秒的间隔将驱动器 A 中的所有文件复制到驱动器 B。 我在 powe
下面的函数一直返回这个错误信息。我认为可能是 double_precision 字段类型导致了这种情况,我尝试使用 CAST,但要么不是这样,要么我没有做对...帮助? 这是错误: ERROR: i
这个问题已经有答案了: Syntax error due to using a reserved word as a table or column name in MySQL (1 个回答) 已关闭
我的数据库有这个小问题。 我创建了一个表“articoli”,其中包含商品的品牌、型号和价格。 每篇文章都由一个 id (ID_ARTICOLO)` 定义,它是一个自动递增字段。 好吧,现在当我尝试插
我是新来的。我目前正在 DeVry 在线学习中级 C++ 编程。我们正在使用 C++ Primer Plus 这本书,到目前为止我一直做得很好。我的老师最近向我们扔了一个曲线球。我目前的任务是这样的:
这个问题在这里已经有了答案: What is an undefined reference/unresolved external symbol error and how do I fix it?
我的网站中有一段代码有问题;此错误仅发生在 Internet Explorer 7 中。 我没有在这里发布我所有的 HTML/CSS 标记,而是发布了网站的一个版本 here . 如您所见,我在列中有
如果尝试在 USB 设备上构建 node.js 应用程序时在我的树莓派上使用 npm 时遇到一些问题。 package.json 看起来像这样: { "name" : "node-todo",
在 Python 中,您有 None单例,在某些情况下表现得很奇怪: >>> a = None >>> type(a) >>> isinstance(a,None) Traceback (most
这是我的 build.gradle (Module:app) 文件: apply plugin: 'com.android.application' android { compileSdkV
我是 android 的新手,我的项目刚才编译和运行正常,但在我尝试实现抽屉导航后,它给了我这个错误 FAILURE: Build failed with an exception. What wen
谁能解释一下?我想我正在做一些非常愚蠢的事情,并且急切地等待着启蒙。 我得到这个输出: phpversion() == 7.2.25-1+0~20191128.32+debian8~1.gbp108
我是一名优秀的程序员,十分优秀!