You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何在Android模拟器中从PC端ASP.NET Core Web API获取JSON数据?

在Android模拟器中调用同一PC上的ASP.NET Core Web API获取JSON数据

这个问题我碰到过好几次,其实核心就是解决模拟器和PC之间的网络连通性以及API的跨域/访问配置问题,一步步来就行:

1. 配置ASP.NET Core Web API允许外部访问

默认情况下,ASP.NET Core只监听localhost,这意味着只有本机的应用能访问,模拟器是无法连接的。你需要修改配置让API监听所有网络接口:

修改Program.cs(.NET 6+)

在构建WebHost的时候添加UseUrls,同时启用CORS解决跨域问题:

var builder = WebApplication.CreateBuilder(args);

// 让API监听所有IP的5000(HTTP)和5001(HTTPS)端口
builder.WebHost.UseUrls("http://0.0.0.0:5000", "https://0.0.0.0:5001");

// 添加CORS服务,允许所有跨域请求(开发阶段可用,生产建议限制源)
builder.Services.AddCors(options =>
{
    options.AddPolicy("AllowAll", policy =>
        policy.AllowAnyOrigin()
              .AllowAnyMethod()
              .AllowAnyHeader());
});

// 其他服务配置(比如添加控制器)
builder.Services.AddControllers();

var app = builder.Build();

// 启用CORS,注意中间件顺序:要在UseRouting之后,UseAuthorization之前
app.UseCors("AllowAll");

app.UseRouting();
app.UseAuthorization();

app.MapControllers();

app.Run();

或者修改launchSettings.json

如果你用Visual Studio运行API,也可以直接修改Properties/launchSettings.json里的applicationUrl

"applicationUrl": "http://0.0.0.0:5000;https://0.0.0.0:5001"

2. 获取你的PC局域网IP地址

模拟器的localhost是它自己的虚拟系统,所以不能用127.0.0.1或者localhost来访问PC上的API。你需要找到PC在局域网中的IP:

  • Windows:打开命令提示符,输入ipconfig,找到当前网络(比如WLAN或以太网)的IPv4地址,格式类似192.168.x.x
  • macOS/Linux:打开终端,输入ifconfigip addr,找到对应的局域网IP

3. 在NativeScript应用中使用正确的API地址

把你的请求URL换成http://[你的PC局域网IP]:[API端口]/api/[控制器路径],举个例子:

原生JavaScript/TypeScript(用fetch)

async function fetchApiData() {
    try {
        // 替换成你的PC IP和API实际路径
        const response = await fetch('http://192.168.1.105:5000/api/WeatherForecast');
        const jsonData = await response.json();
        console.log('成功获取数据:', jsonData);
        // 在这里处理数据,比如更新UI
    } catch (error) {
        console.error('请求失败:', error);
    }
}

// 调用函数获取数据
fetchApiData();

NativeScript Angular(用HttpClient)

import { Injectable } from '@angular/core';
import { HttpClient } from '@angular/common/http';
import { Observable } from 'rxjs';

@Injectable({ providedIn: 'root' })
export class ApiService {
    // 替换成你的PC IP和API基础路径
    private baseUrl = 'http://192.168.1.105:5000/api';

    constructor(private http: HttpClient) {}

    getWeatherData(): Observable<any[]> {
        return this.http.get<any[]>(`${this.baseUrl}/WeatherForecast`);
    }
}

4. 检查PC防火墙设置

别忘记!Windows防火墙(或其他防火墙软件)可能会拦截模拟器的请求。你需要添加入站规则,允许API使用的端口(比如5000、5001)的HTTP/HTTPS流量:

  • 打开Windows Defender防火墙 → 高级设置 → 入站规则 → 新建规则
  • 选择“端口” → 输入5000,5001 → 允许连接 → 完成

5. 验证连接

先在PC的浏览器里用局域网IP访问API,比如http://192.168.1.105:5000/api/WeatherForecast,确认能正常返回JSON数据。如果这一步没问题,再运行NativeScript应用测试接口调用。

额外提示

如果你的API启用了HTTPS,模拟器可能会不信任自签名证书,开发阶段可以暂时改用HTTP,或者配置模拟器信任你的证书(步骤稍复杂,建议开发用HTTP更省心)。

内容的提问来源于stack exchange,提问作者Martian

火山引擎 最新活动