You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将.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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 11:42:13