簡體   English   中英

使用Xamarin訪問在Visual Studio中創建的iOS應用程序的Web服務和IPv4和IPv6

[英]Access to web service wit IPv4 and IPv6 for iOS app created in Visual Studio with Xamarin

我使用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 connect所述)。 有人可以幫我嗎?

更新

代碼示例:

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地址文字必須使用[]進行編碼:

private static string _requestUriV6 = "http://[2001:db8::1]/getinfo/";

端口號可以選擇在[ ]

private static string _requestUriV6 = "http://[2001:db8::1]:80/getinfo/";

請警告您的客戶,在僅支持NAT64而不支持本機IPv6的IPv6網絡上(例如Apple設備提供的測試網絡 )。 因此,您當前的代碼仍可能會被拒絕。 他們確實提到了如何處理地址文字,但明確建議不要這樣做。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM