使用c#和httpclient向Rest Api发送请求

本文关键字:Api 请求 Rest httpclient 使用 | 更新日期: 2023-09-27 17:49:42

有这样的代码:

var client = new HttpClient();
var postData = new List<KeyValuePair<string, string>>();
postData.Add(new KeyValuePair<string, string>("username:", " 1"));
postData.Add(new KeyValuePair<string, string>("password:", " 1"));
HttpContent content = new FormUrlEncodedContent(postData);
HttpResponseMessage response = await client.PostAsync(
    "http://libdiary.liberty-lab.ru/api/v1/login", 
    content);
string result = await response.Content.ReadAsStringAsync();
return result;

他必须向服务器发出post请求。这个项目是windows phone。负责此查询的服务器上的特性看起来像(Python):

def log_in(request):
    username = request.META['HTTP_USERNAME']
    password = request.META['HTTP_PASSWORD']
    user = auth.authenticate(username=username, password=password)
    if user is not None:
        auth.login(request, user)
        content = json.dumps('Your welcome dear user!')
        return HttpResponse(content, content_type='application/json')
    else:
        content = json.dumps('Sorry! Please, check your name or password.')
        return HttpResponse(content, content_type='application/json')

然而,尝试访问windows手机总是一个error:INTERNAL SERVER ERROR,在应用程序代码中返回http页面,该页上有一个错误。你能告诉我是什么问题吗?也许是我发错了数据,你能建议我怎么做才对吗?

使用c#和httpclient向Rest Api发送请求

您正在尝试访问名为HTTP_USERNAMEHTTP_USERNAME的键上的request对象,这些键不存在。要么在调用站点更改,要么在目标站点更改:

username = request.META['username']
password = request.META['password']

我解决了这个问题。服务器检查报头中的用户名和密码。我只是添加了一个新的标题"用户名"和新的标题"密码",并分配他们适当的值。

  HttpContent content = new FormUrlEncodedContent(postData);
        content.Headers.Add("username", "1");
        content.Headers.Add("password", "2");

谢谢你的帮助,尤其是Yuval Itzchakov。