Nachdem ich eine App mit der PCL-Methode in Xamarin erstellt habe und sie 100% mit Standard-HTTP funktionierte, habe ich jetzt den Remote-Test-Server so geändert, dass SSL mit selbstsignierten Zertifikaten verwendet wird.WebRequest gibt 404 zurück, wenn zu SSL gewechselt wird
Die App kontaktiert eine benutzerdefinierte API für die Anmeldung bei einem Server und die Abfrage bestimmter Daten.
Ich habe die App geändert jetzt bei SSL suchen und bekam zunächst einen Fehler in Bezug auf Authentifizierung nicht oder etwas arbeiten, aber unter Verwendung zum Testen von SSL-Fehler ausgeschaltet:
ServicePointManager.ServerCertificateValidationCallback += (o, certificate, chain, errors) => true;
in meinen AppDelegate Dateien FinishedLaunching Methode, die bin über diesen Fehler hinweggekommen.
Ich erhalte jetzt einen 404/Protokollfehler, wenn ich versuche, meinen Login POST zu der angegebenen URL zu machen.
Ich benutze HttpWebRequest für meine RESTful Anrufe und das funktioniert gut, wenn ich zurück zu einfachen http.
Nicht sicher warum, aber einige Artikel vorgeschlagen, mit ModernHttpClient, was ich tat. Ich importierte die Komponente (auch das Paket mit NuGet hinzugefügt) ohne Erfolg.
Fehle ich etwas anderes, das ich in meinem Code im Zusammenhang mit httpwebresponse konfigurieren sollte, wenn ich den SSL-Server kontaktiere oder ist diese Komponente einfach nicht in der Lage, mit einem SSL-Server zu sprechen?
Meine Login-Funktion ist wie folgt (Unrelated Code entfernt/verschleierten):
public JsonUser postLogin(string csrfToken, string partnerId, string username, string password){
string userEndPoint = SingletonAppSettngs.Instance().apiEndPoint;
userEndPoint = userEndPoint.Replace ("druid/", "");
var request = WebRequest.CreateHttp(string.Format(this.apiBaseUrl + userEndPoint + @"user/login.json"));
// Request header collection set up
request.ContentType = "application/json";
request.Headers.Add ("X-CSRF-Token", csrfToken);
// Add other configs
request.Method = "POST";
using (var streamWriter = new StreamWriter(request.GetRequestStream()))
{
string json_body_content = "{\"username\":\"" + username + "\",\"password\":\"" + password + "\"}";
streamWriter.Write(json_body_content);
streamWriter.Flush();
streamWriter.Close();
}
try{
HttpWebResponse httpResponse = (HttpWebResponse)request.GetResponse();
using (StreamReader reader = new StreamReader (httpResponse.GetResponseStream())) {
var content = reader.ReadToEnd();
content = content.Replace ("[],", "null,");
content = content.Replace ("[]", "null");
if (content == null) {
throw new Exception ("request_post_login - content is NULL");
} else {
JsonSerializerSettings jss = new JsonSerializerSettings();
jss.NullValueHandling = NullValueHandling.Ignore;
JsonUser deserializedUser = JsonConvert.DeserializeObject<JsonUser>(content, jss);
if(content.Contains ("Hire company admin user")){
deserializedUser.user.roles.__invalid_name__5 = "Hire company admin user";
deserializedUser.user.roles.__invalid_name__2 = "authenticated user";
}
return deserializedUser;
}
}
}catch(Exception httpEx){
Console.WriteLine ("httpEx Exception: " + httpEx.Message);
Console.WriteLine ("httpEx Inner Exception: " + httpEx.InnerException.Message);
JsonUser JsonUserError = new JsonUser();
JsonUserError.ErrorMessage = "Error occured: " + httpEx.Message;
return JsonUserError;
}
}