C# ios不能在真正的ios设备上运行,但可以在模拟器上运行

C# ios不能在真正的ios设备上运行,但可以在模拟器上运行,c#,ios,web-services,xamarin.ios,restapi,C#,Ios,Web Services,Xamarin.ios,Restapi,我构建了一个移动应用程序。该应用程序在iOS模拟器、Android模拟器和Android real设备上运行良好。但当我在TestFlight上发布并安装在真正的iOS设备上时,这个应用程序就不起作用了。我没有得到任何错误。我的微调器(激活器指示器)一直在运行,我无法从HttpResponse获得任何响应。我使用Web服务构建了此应用程序。因此我使用http://46.221.....发送或获取请求的url。我认为iOS不支持http请求是因为安全问题。但如果这是真的,那么为什么这个应用程序在模

我构建了一个移动应用程序。该应用程序在iOS模拟器、Android模拟器和Android real设备上运行良好。但当我在TestFlight上发布并安装在真正的iOS设备上时,这个应用程序就不起作用了。我没有得到任何错误。我的微调器(激活器指示器)一直在运行,我无法从HttpResponse获得任何响应。我使用Web服务构建了此应用程序。因此我使用http://46.221.....发送或获取请求的url。我认为iOS不支持http请求是因为安全问题。但如果这是真的,那么为什么这个应用程序在模拟器上运行得很好呢?我找不到任何解决办法。以下是我的代码部分:

public async Task<BSUser> ValidateUser(string userName, string password)
    {
        string url = Xamarin.Essentials.Preferences.Get(Constants.URL_KEY, "") + "/api/Validateuser";
        HttpClient _Client = new HttpClient();

        var data = new Dictionary<string, string>
        {
          {"userName", userName},
          {"password", password}
        };

        string jsonData = JsonConvert.SerializeObject(data);
        HttpContent content = new StringContent(jsonData, Encoding.UTF8, "application/json");

        try
        {
            HttpResponseMessage httpResponse = await _Client.PostAsync(url, content);
            if (httpResponse.IsSuccessStatusCode)
            {
                var responseData = await httpResponse.Content.ReadAsStringAsync().ConfigureAwait(false);
                var result = JsonConvert.DeserializeObject(responseData).ToString();
                UserInfo userInfo = JsonConvert.DeserializeObject<UserInfo>(result);

                BSUser value = new BSUser();
                value.UserName = userInfo.userCode;

                return value;
            }
            else
            {
                return null;
            }
        }
        catch (SystemException)
        {
            return null;
        }
    }
public async Task ValidateUser(字符串用户名、字符串密码)
{
字符串url=Xamarin.Essentials.Preferences.Get(Constants.url_KEY,“”+“/api/Validateuser”;
HttpClient _Client=新的HttpClient();
var数据=新字典
{
{“用户名”,用户名},
{“密码”,密码}
};
字符串jsonData=JsonConvert.SerializeObject(数据);
HttpContent=newstringcontent(jsonData,Encoding.UTF8,“application/json”);
尝试
{
HttpResponseMessage httpResponse=wait_Client.PostAsync(url,内容);
if(httpResponse.IsSuccessStatusCode)
{
var responseData=await-httpResponse.Content.ReadAsStringAsync().ConfigureAwait(false);
var result=JsonConvert.DeserializeObject(responseData.ToString();
UserInfo UserInfo=JsonConvert.DeserializeObject(结果);
BSUser值=新BSUser();
value.UserName=userInfo.userCode;
返回值;
}
其他的
{
返回null;
}
}
捕获(系统异常)
{
返回null;
}
}

看起来您真的应该利用HTTPS而不是HTTP。有关更多信息,请参阅以下页面:

这就是ios中ATS的问题,如果你想使用HTTP,你可以配置它。


其他人也遇到了和你一样的问题:

我发现了我项目的问题。这与HTTPS-HTTP或安全情况无关。这是如此荒谬和不合逻辑,但这是真正的问题。我的应用程序在任何iOS模拟器上都运行得很好,但是,在Visual Studio中,模拟器的最低版本是iPhone-8。但是当我在iPhone-6的真实设备上安装我的应用程序时,我得到了一个错误。但是我的HttpResponse返回了200OK,我将来自我的服务的所有值都视为json。我认为旧版本和新版本的iPhone在转换Json序列化方面存在一些差异。

您是否发布到TestFlight
Release
build with
NSUrlSession
http客户端实现?嗨,Alexey!我发布它时没有使用NSUrlSession构建它。但是我在我的信息中添加了“NSAppTransportSecurity NSAllowsArbitraryLoads NSAllowsArbitraryLoadsInWebContent”。请举例说明您的建议。如果使用
HttpClient
的默认托管实现,所有这些设置都将无效,试试这个设置,也许会有帮助。我找到了你说的。我用NSUrlSession再次发布了我的TestFlight应用程序,但我有同样的错误。当我尝试登录时,我的应用程序正在崩溃。但iOS模拟器仍然可以正常工作。太有趣了!在这种情况下,我所能推荐的就是改进您的日志记录和错误处理。嗨,史蒂文!谢谢你的回复。我知道https的优点。我发现了我的问题。它与iPhone版本有关。新版本的iPhone可以转换我的Json数据,但在旧版本的iPhone中,我应该进行一些修复。因为我已经从服务中获取了我的所有值。@Veysel Turan,所以这不是HTTP的问题?是ios版本导致了这个问题?只是有点好奇。谢谢你的回复。是的!!我使用HTTP从服务中获取所有数据,HTTP请求没有问题。我的问题是iPhone-6的设备。将数据转换为Json.Serialization时出错。但令人惊讶的是,我的代码可以在所有iOS模拟器上运行,这些模拟器都是iPhone8和更高版本。此外,我没有iPhone8或更高版本的真实设备。因此,我不知道这些版本的真实设备是否也会出现问题。@Veysel Turan了解到了这一点,谢谢。