如何将.NET Maui与Django REST API连接?连接失败求助
问题:.NET Maui无法连接本地Django REST API
我有一个运行在127.0.0.1:8000的Django REST API,POST请求端点为127.0.0.1:8000/add/。我在.NET Maui中做了一个简单的聊天机器人交互功能,预期用户通过Maui界面发消息到API,API的响应显示在界面上,但始终无法建立连接,试了很多次都不行。
注:已通过Postman验证API运行正常。
注2:向API发送消息采用JSON格式:{"name":"message"}
Django POST视图代码
@api_view(['POST']) def addItem(request): # print("this is davinci methode",davinci("hi")) print("request data : ",request.data,"type of request.data ", type(request.data)) name = request.data.get('name') print("name value: ", name) request.data['name']=davinci(request.data.get('name')) serializer =ItemSerializer(data=request.data) if serializer.is_valid(): serializer.save() print("serializer data : ",serializer.data ,"type of serializer data : ",type(serializer.data) ) return Response(request.data)
.NET Maui请求函数代码
public async Task<string> SendToDjangoAPIAsync(string input) { Console.Write("Im in SendToDjangoAPI"); input = "languge c"; string apiURL = "http://127.0.0.1:8000/add/"; var httpClient = new HttpClient(); var inputContent = new StringContent(JsonSerializer.Serialize(new { name = input }), Encoding.UTF8, "application/json"); var response = await httpClient.PostAsync(apiURL, inputContent); Console.WriteLine(response.Content); if (response.IsSuccessStatusCode) { var responseData = await response.Content.ReadFromJsonAsync<Dictionary<string, string>>(); Console.WriteLine(responseData["name"]); return responseData["name"]; } else { throw new Exception($"Error connecting to the API. Status Code: {response.StatusCode}, Reason: {response.ReasonPhrase}"); } }
排查方向与解决方案
1. 本地地址访问限制(最常见问题)
.NET Maui应用运行在模拟器/真机上时,127.0.0.1指向的是设备自身,而非你的开发电脑。需要把API地址换成电脑的局域网IP(比如http://192.168.x.x:8000/add/),同时确保:
- 给Django安装并配置
django-cors-headers,允许跨域访问 - 电脑防火墙开放8000端口,或暂时关闭防火墙测试
2. HttpClient实例管理问题
每次调用函数都新建HttpClient实例可能导致连接池耗尽,建议改用单例:
// 在App.xaml.cs或服务容器中注册单例HttpClient private static readonly HttpClient _httpClient = new HttpClient(); public async Task<string> SendToDjangoAPIAsync(string input) { Console.Write("Im in SendToDjangoAPI"); input = "languge c"; string apiURL = "http://你的电脑局域网IP:8000/add/"; var inputContent = new StringContent(JsonSerializer.Serialize(new { name = input }), Encoding.UTF8, "application/json"); var response = await _httpClient.PostAsync(apiURL, inputContent); // 后续代码不变 }
3. 序列化与反序列化校验
临时打印.NET端序列化后的JSON字符串,确认格式是否符合API要求:
var json = JsonSerializer.Serialize(new { name = input }); Console.WriteLine(json); // 检查输出是否为{"name":"languge c"}格式
4. 完善异常日志
在调用SendToDjangoAPIAsync的地方添加完整异常捕获,获取更详细的报错信息:
try { var result = await SendToDjangoAPIAsync("test"); } catch (Exception ex) { Console.WriteLine($"完整异常信息:{ex.ToString()}"); }
内容的提问来源于stack exchange,提问作者the_yaz2000
相关产品推荐
相关产品推荐

