gpt4 book ai didi

c# - 使用 .Net HttpClient 访问 cloudant 数据库

转载 作者:行者123 更新时间:2023-11-30 14:12:37 25 4
gpt4 key购买 nike

我正在尝试从 .Net MVC 应用程序连接到 Cloudant(沙发式数据库)。我遵循使用 HttpClient 使用 Web API 的指南,如下所示: http://www.asp.net/web-api/overview/web-api-clients/calling-a-web-api-from-a-net-client

到目前为止,我有两种方法——一种获取文档,一种创建文档——但都存在错误。 Get 方法返回 Unauthorized,Post 方法返回 MethodNotAllowed。

客户端是这样创建的:

    private HttpClient CreateLdstnCouchClient()
{
// TODO: Consider using WebRequestHandler to set properties


HttpClient client = new HttpClient();
client.BaseAddress = new Uri(_couchUrl);

// Accept JSON
client.DefaultRequestHeaders.Accept.Add(
new MediaTypeWithQualityHeaderValue("application/json"));


return client;
}

获取方法是:

    public override string GetDocumentJson(string id)
{
string url = "/" + id;

HttpResponseMessage response = new HttpResponseMessage();
string strContent = "";

using (var client = CreateLdstnCouchClient())
{
response = client.GetAsync(url).Result;

if (response.IsSuccessStatusCode)
{
strContent = response.Content.ReadAsStringAsync().Result;
}
else
{
// DEBUG
strContent = response.StatusCode.ToString();
LslTrace.Write("Failed to get data from couch");
}
}

return strContent;
}

Post 方法是:

    public override string CreateDocument(object serializableObject)
{
string url = CouchApi.CREATE_DOCUMENT_POST;

HttpResponseMessage response = new HttpResponseMessage();

string strContent = "";

using (var client = CreateLdstnCouchClient())
{

response = client.PostAsJsonAsync(url, serializableObject).Result;
strContent = response.Content.ReadAsStringAsync().Result;
}

if (response.IsSuccessStatusCode)
{
return strContent;
}
else
{
LslTrace.Write("{0} ({1})", (int)response.StatusCode, response.ReasonPhrase);
return response.StatusCode.ToString();
}
}

URL 根据 API 文档:https://username:password@username.cloudant.com .

我对正在发生的事情感到非常困惑,并且很难找到示例。感谢您的帮助!

托马斯

最佳答案

对于 HttpClient,您需要执行以下操作以正确进行身份验证(假设您使用基本身份验证):

HttpClientHandler handler = new HttpClientHandler();
handler.Credentials = new NetworkCredential(_userName, _password);
HttpClient client = new HttpClient(handler) {
BaseAddress = new Uri(_couchUrl)
};

您不应在 _couchUrl 中指定用户名/密码 - HttpClient 不支持。

我看不到您对 PostAsJsonAsync 的实现或您正在构建的完整 Url,但您可以尝试检查/记录 response.ReasonPhrase 发生错误时获得有关问题所在的提示。

关于c# - 使用 .Net HttpClient 访问 cloudant 数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17035412/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com