C#HttpClient PostAsync不能与django rest框架一起使用

时间:2017-02-26 13:44:31

标签: c# django xamarin django-rest-framework httpclient

在Django(DRF)

在test.views.py

class TestAPIView(APIView):

    permission_classes = (AllowAny,)
    def post(self, request, format=None):
        print(request.data)
        return Response(request.data)

在test.urls.py

from django.conf.urls import url
from .views import TestAPIView

urlpatterns = [
    url(r'^test/$', view=TestAPIView.as_view()),
]

如您所见,我的测试网址应该返回发布数据。 它在可浏览的api和Unity WWW中运行良好(类似于httpclient统一提供的内容)。

但它不适用于HttpClient PostAsync(或SendAsync)

这是我的C#代码

在Xamarin / C#中

    Post newPost = new Post { Title = "asdfasfa", Content = "asdfasffasf" };

    var content = JsonConvert.SerializeObject(newPost);

    Debug.WriteLine(content);

    var response = await _client.PostAsync("http://127.0.0.1:8000/test/", new StringContent(content));

    var responseString = await response.Content.ReadAsStringAsync();

    Debug.WriteLine(responseString);

和控制台的结果......

在C#Console中

评论的字符串是我写的。不是从控制台

{"Id":0,"Title":"asdfasfa","Content":"asdfasffasf"} // <- this is the sent data.
Thread started:  #6
Thread started:  #16
Thread started:  #17
{} // <- and the received data

和...

Django(DRF)控制台中的

[26/Feb/2017 13:37:34] "POST /test/ HTTP/1.1" 200 2
<QueryDict: {}>

我的帖子数据去了哪里? django收到<QueryDict: {}>

这只适用于httpclient。也许只有django。 我用=&gt;测试了它https://jsonplaceholder.typicode.com/posts 并且帖子创作工作得很好。

这可能是一个Django问题,可能是C#问题,我不知道...... 请帮助!

PS? HttpWebRequest也可以正常工作。

1 个答案:

答案 0 :(得分:0)

我根本不了解C#,但根据其他帖子(httpclient call to webapi to post data not workingHttpClient is not posting form data),您可能需要在StringContent中设置更多信息:

StringContent(content, Encoding.UTF8, "application/json")