2017-06-12 1 views
0

Ich bin mit post mehrteiligen Form Daten in xamarin.forms stecken. Als ich mit POSTMAN versuchte, funktioniert alles gut, aber nicht mit meinem Code in xamarin.forms. Ich weiß nicht, was mit dem Code falsch ist. Ich benutze eine Bibliothek mit der Nummer RestSharp port as PCL and for .NET Core. HierFest mit POST MULTI PART FORM DATEN - Xamarin.forms

ist der Postbote Code

var client = new RestClient("http://192.168.2.126:86/Appointment.svc/UploadFileios"); 
var request = new RestRequest(Method.POST); 
request.AddHeader("postman-token", "11a61861-ed9c-2f35-751b-6b615907c269"); 
request.AddHeader("cache-control", "no-cache"); 
request.AddHeader("content-type", "multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW"); 
request.AddParameter("multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW", "------WebKitFormBoundary7MA4YWxkTrZu0gW\r\nContent-Disposition: form-data; name=\"phone\"\r\n\r\n81234518\r\n------WebKitFormBoundary7MA4YWxkTrZu0gW\r\nContent-Disposition: form-data; name=\"address\"\r\n\r\nAddress Dummy House\r\n------WebKitFormBoundary7MA4YWxkTrZu0gW\r\nContent-Disposition: form-data; name=\"password\"\r\n\r\n123\r\n------WebKitFormBoundary7MA4YWxkTrZu0gW\r\nContent-Disposition: form-data; name=\"confpassword\"\r\n\r\n123\r\n------WebKitFormBoundary7MA4YWxkTrZu0gW\r\nContent-Disposition: form-data; name=\"name\"\r\n\r\nAlex Chengalan Paily\r\n------WebKitFormBoundary7MA4YWxkTrZu0gW--", ParameterType.RequestBody); 
IRestResponse response = client.Execute(request); 

und unten ist mein Code mit xamarin.forms.

var client = new RestClient(url); 
        var request = new RestRequest(Method.POST); 
        string boundary = "---------------------------" + DateTime.Now.Ticks.ToString("x"); 
        //string boundary = "----WebKitFormBoundary7MA4YWxkTrZu0gW"; 
        request.AddHeader("cache-control", "no-cache"); 
        request.AddHeader("content-type", "multipart/form-data; boundary=" + boundary); 
        string name = "multipart/form-data; boundary=" + boundary; 


        string formdataTemplate = "--" + boundary + 
         "\r\nContent-Disposition: form-data; name=\"{0}\"\r\n\r\n{1}\r\n"; 
        string formitem = null; 
        foreach (string key in nvc.Keys) 
        { 
         formitem = formitem + string.Format(formdataTemplate, key, nvc[key]); 
        } 
        Debug.WriteLine("Items: " + formitem); 
        request.AddParameter(name, formitem, ParameterType.RequestBody); 
IRestResponse response = await client.Execute(request); 

Aber ich bin immer einen Parse-Fehler hier vom Server. Bitte helfen Sie mir in dieser Situation.

+0

Was ist der Fehler, den Sie bekommen? –

+0

Es ist eine Parse-Ausnahme, die von Back-End ausgelöst wird, die eine benutzerdefinierte Nachricht ist. –

+0

Können Sie Parse-Fehlermeldung teilen? Kann dieser Link Ihnen helfen [Multipart Formular Post in C#] (https://briangrinstead.com/blog/multipart-form-post-in-c/) –

Antwort

0

Ich bin mit der RestSharp-Bibliothek nicht vertraut genug, aber hier ist ein funktionierendes Beispiel, das einen Dateistream und andere Variablen ohne Abhängigkeiten von Drittanbietern unterstützt und in Xamarin.Forms von einem PCL aus arbeitet (beachten Sie, dass dies nicht nötig ist) Verwirrung mit Grenzen manuell):

try 
{ 
    var file = await PCLStorage.FileSystem.Current.LocalStorage.GetFileAsync(device.ClientCodePhoto); 
    using(Stream fileStream = await file.OpenAsync(PCLStorage.FileAccess.Read)) 
    using(var client = new HttpClient()) 
    using(var content = new MultipartFormDataContent()) 
    { 
     content.Add(new StreamContent(fileStream), "client_code_image", "upload.jpg"); 

     var values = new[] 
     { 
      new KeyValuePair<string, string>("client_code", device.ClientCode), 
      new KeyValuePair<string, string>("registered_by", device.RegisteredBy), 
      new KeyValuePair<string, string>("notes", device.Notes ?? string.Empty), 
      new KeyValuePair<string, string>("sim_code", device.SimCode), 
      new KeyValuePair<string, string>("qr_codes", device.QrCodes) 
     }; 

     foreach(var keyValuePair in values) 
      content.Add(new StringContent(keyValuePair.Value), string.Format("\"{0}\"", keyValuePair.Key)); 

     using(var result = await client.PostAsync($"{Constants.Server}devices/", content)) 
     { 
      var input = await result.Content.ReadAsStringAsync(); 

      if(result.IsSuccessStatusCode) 
      { 
       // do something with the result 
      } 
     } 
    } 
} 
catch(Exception ex) 
{ 
    Debug.WriteLine(ex.Message); 
    // something went wrong 
} 
Verwandte Themen