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

.NET 8预览版MAUI调用GatewayAddresses抛出PlatformNotSupportedException

问题分析与解决方案

异常原因

这大概率是.NET 8预览版6的已知bug。预览版本身以功能迭代为主,稳定性不足,部分跨平台API的Android端MAUI实现存在遗漏或未完善的情况——哪怕官方文档标注支持,实际运行时还是会抛出不支持异常。

替代方案:直接调用Android原生API

既然跨平台API暂时失效,直接用Android原生逻辑获取网关地址,兼容性更可靠:

代码实现

  1. 引入必要的Android命名空间:
using Android.Content;
using Android.Net;
using Android.OS;
  1. 编写获取网关的方法:
public static string GetAndroidGateway()
{
    string gateway = string.Empty;
    var connectivityManager = (ConnectivityManager)Android.App.Application.Context.GetSystemService(Context.ConnectivityService);

    if (Build.VERSION.SdkInt >= BuildVersionCodes.M)
    {
        var activeNetwork = connectivityManager.ActiveNetwork;
        var capabilities = connectivityManager.GetNetworkCapabilities(activeNetwork);
        
        if (capabilities != null)
        {
            var linkProperties = connectivityManager.GetLinkProperties(activeNetwork);
            if (linkProperties != null)
            {
                foreach (var gatewayInfo in linkProperties.Gateways)
                {
                    gateway = gatewayInfo.IpAddress.HostAddress;
                    break; // 取第一个有效网关
                }
            }
        }
    }
    else
    {
        // 适配Android 6.0及以下版本
        var activeNetworkInfo = connectivityManager.ActiveNetworkInfo;
        if (activeNetworkInfo != null && activeNetworkInfo.IsConnected)
        {
            var wifiManager = (WifiManager)Android.App.Application.Context.GetSystemService(Context.WifiService);
            var dhcpInfo = wifiManager.DhcpInfo;
            gateway = Android.Net.Util.IntToIpAddress(dhcpInfo.Gateway);
        }
    }

    return gateway;
}
  1. 配置权限
    在AndroidManifest.xml里添加必要权限:
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<!-- Android 10+ 如果需要后台获取网关,可能需要添加ACCESS_BACKGROUND_LOCATION,按需配置 -->

后续处理建议

  • 等待.NET 8正式版/后续预览版:微软通常会在迭代中修复这类API实现问题,正式版发布后可以再试回原跨平台代码。
  • 多平台兼容处理:用MAUI的条件编译,只在Android平台调用原生方法,其他平台保留原逻辑:
string gateway = string.Empty;
#if ANDROID
gateway = GetAndroidGateway();
#else
// 其他平台沿用原跨平台逻辑
var networkInterfaces = NetworkInterface.GetAllNetworkInterfaces();
foreach (var networkInterface in networkInterfaces)
{
    var ipProperties = networkInterface.GetIPProperties();
    var gatewayIpAddressInfo = ipProperties.GatewayAddresses.FirstOrDefault();
    if (gatewayIpAddressInfo != null)
    {
        gateway = gatewayIpAddressInfo.Address.ToString();
        break;
    }
}
#endif

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 20:12:21