【发布时间】:2018-07-23 12:27:13
【问题描述】:
我使用 Xamarin 在 VS 中创建 iOS 应用程序,从服务器获取信息(文本/图像/等)。首先,我通过域名(如http://domainname.com/getinfo?params=xyz)访问服务器。这适用于 IPv4 和 IPv6。但是现在我必须使用通过IP号访问服务器。服务器同时具有 IPv4 号码和 IPv6 号码。要获取信息,我使用带有查询字符串的 HttpClient,例如“http://xxx.xxx.xxx.xxx/getinfo?params=xyz”,这在设备通过 IPv4 连接到网络时有效。但是当设备通过 IPv6 连接到网络时,它不起作用(正如 iTunes 连接所说)。 有人可以帮我吗?
更新
代码示例:
public class CampaignData
{
public int _campaignId;
public string _campaignName;
public string _campaignDescription;
public CampaignData(int campaignId, string campaignName, string campaignDescription){
_campaignId=_campaignId;
_campaignName=campaignName;
_campaignDescription=campaignDescription;
}
}
public class DataService
{
private static string _requestUri = "http://xxx.xxx.xxx.xxx/getinfo/";
private static string _requestUriV6 = "http://xxxx:xxxx:x:xxx:xxxx:xxxx:xxxx:xxxx/getinfo/";
public static async Task<List<CampaignData>> GetCampaignsList(string lang)
{
string queryString = _requestUri + "get_campaigns_list.php?lang="+lang;
HttpClient client = new HttpClient();
var response = await client.GetAsync(queryString);
dynamic data = null;
if (response != null)
{
List<CampaignData> campaignsList = new List<CampaignData>();
string json = response.Content.ReadAsStringAsync().Result;
data = JsonConvert.DeserializeObject(json);
if (data["status"] == "success")
{
foreach (var campaign in data["campaigns"])
{
int id = campaign["idx"];
string description = campaign["description"];
string name = campaign["description"];
campaignsList.Add(new CampaignData(id, name, description));
}
return campaignsList;
}
else
{
return null;
}
}
return null;
}
}
【问题讨论】:
-
请显示您要执行的操作的代码。我的第一个猜测是您没有使用文字 IPv6 地址正确构建 URL。另外:通过 IP 地址访问服务器是一个非常糟糕的主意,但这不是你的问题 :)
-
@SanderSteffann 我知道这是个坏主意,但不幸的是,客户并不关心。
-
您不应使用 IP 地址文字。这可能会导致您的应用被拒绝。始终使用域名。如果您的客户不关心在 App Store 中的存在,那么我想这没关系....
-
@MichaelHampton 所以不可能使用 IPv6 访问服务器,不是吗?
-
我不知道你在说什么。您当然可以使用 IPv6!您不能使用文字地址。您必须使用域名。
标签: ios visual-studio xamarin.ios ipv6 ipv4