2017-06-12 9 views
0

xamarin.formsのポストマルチパートフォームデータがついています。私がPOSTMANで試してみると、すべて正常に動作しますが、xamarin.formsのコードではうまく動作しません。私はコードに何が間違っているのか分かりません。私はRestSharp port as PCL and for .NET Coreを呼び出すライブラリを使用しています。ここでPOSTマルチパーツフォームデータでスタックされている - Xamarin.forms

はPOSTMANコード

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); 

以下は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); 

ここではサーバーから解析エラーが発生しています。この状況で私を助けてください。

+0

エラーは何ですか? –

+0

これは、カスタムメッセージであるバックエンドからトリガされたパーズ例外です。 –

+0

解析エラーメッセージを共有できますか?このリンクがあなたに役立つかもしれません[C#でのMultipart Form Post](https://briangrinstead.com/blog/multipart-form-post-in-c/) –

答えて

0

RestSharpライブラリにはあまりよく慣れていませんが、サードパーティの依存関係がなく、ファイルストリームやその他の変数をサポートし、PCLのXamarin.Formsで作業している実例です(注記は必要ありません手動で境界線を混乱させる):

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 
} 
関連する問題