2017-05-31 8 views
0

私はXamarin IOSを使用してIOSのモバイルアプリケーションを開発しています.xamarin PostAsync()メソッドを使用してイメージをサーバーにポストしようとすると、残念ながら例外が発生します。multipartformdataをxamarin iosに投稿するには?

public async Task<string> PostCreatePlatform(Platform new_platform, Byte[] image) 
{ 
    new_platform.id = null; 
    using (var client = new HttpClient()) 
    { 
     client.DefaultRequestHeaders.Add("Authorization", String.Format("Token {0}", TokenInit.Token)); 
     var response = await client.PostAsync(b + "platforms/", new StringContent(JsonConvert.SerializeObject(new_platform, new JsonSerializerSettings { NullValueHandling = NullValueHandling.Ignore }).ToString(),Encoding.UTF8, "application/json")); 
     if (response.IsSuccessStatusCode) 
     { 
     if (image != null) 
     { 
      var TempPlatform = await response.Content.ReadAsStringAsync(); 
      var final = JsonConvert.DeserializeObject<Platform>(TempPlatform); 
      MultipartFormDataContent form = new MultipartFormDataContent(); 
      new_platform.id = final.id.Value; 
      form.Add(new ByteArrayContent(image, 0, image.Count()), "file"); 
      var response2 = await client.PostAsync(String.Format(b + "platform/{0}/attachments/upload/", new_platform.id.Value), form); 
      if (response2.IsSuccessStatusCode) 
      { 
       return "success"; 
      } 
     else 
     { 
      return "failed"; 
     } 

     } 
      return "success"; 
     } 
     else 
     { 
     return "failed"; 
     } 
} 

のInnerException:System.ObjectDisposedException

System.AggregateException: One or more errors occurred. —-> System.AggregateException: One or more errors occurred. —-> System.ObjectDisposedException: Cannot access a disposed object. 
Object name: 'System.Net.Sockets.NetworkStream'. 
at System.Net.WebConnectionStream.EndWrite (System.IAsyncResult r) [0x000b2] in /Library/Frameworks/Xamarin.iOS.framework/Versions/10.10.0.33/src/mono/mcs/class/System/System.Net/WebConnectionStream.cs:616 
at System.IO.Stream+<>c.<BeginEndWriteAsync>b__53_1 (System.IO.Stream stream, System.IAsyncResult asyncResult) [0x00000] in /Library/Frameworks/Xamarin.iOS.framework/Versions/10.10.0.33/src/mono/mcs/class/referencesource/mscorlib/system/io/stream.cs:729 
at at (wrapper delegate-invoke) System.Func`3[System.IO.Stream,System.IAsyncResult,System.Threading.Tasks.VoidTaskResult]:invoke_TResult_T1_T2 (System.IO.Stream,System.IAsyncResult) 
at System.Threading.Tasks.TaskFactory`1+FromAsyncTrimPromise`1[TResult,TInstance].Complete (TInstance thisRef, System.Func`3[T1,T2,TResult] endMethod, System.IAsyncResult asyncResult, System.Boolean requiresSynchronization) [0x00000] in /Library/Frameworks/Xamarin.iOS.framework/Versions/10.10.0.33/src/mono/mcs/class/referencesource/mscorlib/system/threading/Tasks/FutureFactory.cs:1441 
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() [0x0000c] in /Library/Frameworks/Xamarin.iOS.framework/Versions/10.10.0.33/src/mono/mcs/class/referencesource/mscorlib/system/runtime/exceptionservices/exceptionservicescommon.cs:151 
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess (System.Threading.Tasks.Task task) [0x00037] in /Library/Frameworks/Xamarin.iOS.framework/Versions/10.10.0.33/src/mono/mcs/class/referencesource/mscorlib/system/runtime/compilerservices/TaskAwaiter.cs:187 
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification (System.Threading.Tasks.Task task) [0x00028] in /Library/Frameworks/Xamarin.iOS.framework/Versions/10.10.0.33/src/mono/mcs/class/referencesource/mscorlib/system/runtime/compilerservices/TaskAwaiter.cs:156 
at System.Runtime.CompilerServices.TaskAwaiter.ValidateEnd (System.Threading.Tasks.Task task) [0x00008] in /Library/Frameworks/Xamarin.iOS.framework/Versions/10.10.0.33/src/mono/mcs/class/referencesource/mscorlib/system/runtime/compilerservices/TaskAwaiter.cs:128 
at System.Runtime.CompilerServices.ConfiguredTaskAwaitable+ConfiguredTaskAwaiter.GetResult() [0x00000] in /Library/Frameworks/Xamarin.iOS.framework/Versions/10.10.0.33/src/mono/mcs/class/referencesource/mscorlib/system/runtime/compilerservices/TaskAwaiter.cs:447 
at System.Net.Http.MultipartContent+<SerializeToStreamAsync>d__8.MoveNext() [0x00265] in <eadf07f9d3724ef0a06ee9064ef34579>:0 
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() [0x0000c] in /Library/Frameworks/Xamarin.iOS.framework/Versions/10.10.0.33/src/mono/mcs/class/referencesource/mscorlib/system/runtime/exceptionservices/exceptionservicescommon.cs:151 
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess (System.Threading.Tasks.Task task) [0x00037] in /Library/Frameworks/Xamarin.iOS.framework/Versions/10.10.0.33/src/mono/mcs/class/referencesource/mscorlib/system/runtime/compilerservices/TaskAwaiter.cs:187 
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification (System.Threading.Tasks.Task task) [0x00028] in /Library/Frameworks/Xamarin.iOS.framework/Versions/10.10.0.33/src/mono/mcs/class/referencesource/mscorlib/system/runtime/compilerservices/TaskAwaiter.cs:156 
at System.Runtime.CompilerServices.TaskAwaiter.ValidateEnd (System.Threading.Tasks.Task task) [0x00008] in /Library/Frameworks/Xamarin.iOS.framework/Versions/10.10.0.33/src/mono/mcs/class/referencesource/mscorlib/system/runtime/compilerservices/TaskAwaiter.cs:128 
at System.Runtime.CompilerServices.ConfiguredTaskAwaitable+ConfiguredTaskAwaiter.GetResult() [0x00000] in 
/Library/Frameworks/Xamarin.iOS.framework/Versions/10.10.0.33/src/mono/mcs/class/referencesource/mscorlib/system/runtime/compilerservices/TaskAwaiter.cs:447 
at System.Net.Http.HttpClientHandler+<SendAsync>d__63.MoveNext() [0x0031d] in <eadf07f9d3724ef0a06ee9064ef34579>:0 
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() [0x0000c] in /Library/Frameworks/Xamarin.iOS.framework/Versions/10.10.0.33/src/mono/mcs/class/referencesource/mscorlib/system/runtime/exceptionservices/exceptionservicescommon.cs:151 
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess (System.Threading.Tasks.Task task) [0x00037] in /Library/Frameworks/Xamarin.iOS.framework/Versions/10.10.0.33/src/mono/mcs/class/referencesource/mscorlib/system/runtime/compilerservices/TaskAwaiter.cs:187 
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification (System.Threading.Tasks.Task task) [0x00028] in /Library/Frameworks/Xamarin.iOS.framework/Versions/10.10.0.33/src/mono/mcs/class/referencesource/mscorlib/system/runtime/compilerservices/TaskAwaiter.cs:156 
at System.Runtime.CompilerServices.TaskAwaiter.ValidateEnd (System.Threading.Tasks.Task task) [0x00008] in /Library/Frameworks/Xamarin.iOS.framework/Versions/10.10.0.33/src/mono/mcs/class/referencesource/mscorlib/system/runtime/compilerservices/TaskAwaiter.cs:128 
at System.Runtime.CompilerServices.ConfiguredTaskAwaitable`1+ConfiguredTaskAwaiter[TResult].GetResult() [0x00000] in /Library/Frameworks/Xamarin.iOS.framework/Versions/10.10.0.33/src/mono/mcs/class/referencesource/mscorlib/system/runtime/compilerservices/TaskAwaiter.cs:535 
at System.Net.Http.HttpClient+<SendAsyncWorker>d__48.MoveNext() [0x000ca] in <eadf07f9d3724ef0a06ee9064ef34579>:0 
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() [0x0000c] in /Library/Frameworks/Xamarin.iOS.framework/Versions/10.10.0.33/src/mono/mcs/class/referencesource/mscorlib/system/runtime/exceptionservices/exceptionservicescommon.cs:151 
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess (System.Threading.Tasks.Task task) [0x00037] in /Library/Frameworks/Xamarin.iOS.framework/Versions/10.10.0.33/src/mono/mcs/class/referencesource/mscorlib/system/runtime/compilerservices/TaskAwaiter.cs:187 
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification (System.Threading.Tasks.Task task) [0x00028] in /Library/Frameworks/Xamarin.iOS.framework/Versions/10.10.0.33/src/mono/mcs/class/referencesource/mscorlib/system/runtime/compilerservices/TaskAwaiter.cs:156 
at System.Runtime.CompilerServices.TaskAwaiter.ValidateEnd (System.Threading.Tasks.Task task) [0x00008] in /Library/Frameworks/Xamarin.iOS.framework/Versions/10.10.0.33/src/mono/mcs/class/referencesource/mscorlib/system/runtime/compilerservices/TaskAwaiter.cs:128 
at System.Runtime.CompilerServices.TaskAwaiter`1[TResult].GetResult() [0x00000] in /Library/Frameworks/Xamarin.iOS.framework/Versions/10.10.0.33/src/mono/mcs/class/referencesource/mscorlib/system/runtime/compilerservices/TaskAwaiter.cs:357 
at FirstApp.ApiInteracting+<PostCreatePlatform>d__7.MoveNext() [0x003e2] in /Users/team1/Downloads/testiOSbayards2-6d24bc43fee6abd445ebcaea12b76c61649468a6/FirstApp/API/ApiInteracting.cs:176 
—- End of inner exception stack trace —- 
at System.Threading.Tasks.Task.ThrowIfExceptional (System.Boolean includeTaskCanceledExceptions) [0x00011] in /Library/Frameworks/Xamarin.iOS.framework/Versions/10.10.0.33/src/mono/mcs/class/referencesource/mscorlib/system/threading/Tasks/Task.cs:2157 
at System.Threading.Tasks.Task`1[TResult].GetResultCore (System.Boolean waitCompletionNotification) [0x0002b] in /Library/Frameworks/Xamarin.iOS.framework/Versions/10.10.0.33/src/mono/mcs/class/referencesource/mscorlib/system/threading/Tasks/Future.cs:562 
at System.Threading.Tasks.Task`1[TResult].get_Result() [0x00000] in 
/Library/Frameworks/Xamarin.iOS.framework/Versions/10.10.0.33/src/mono/mcs/class/referencesource/mscorlib/system/threading/Tasks/Future.cs:532 
at FirstApp.AddPlatformTableViewController+<>c__DisplayClass247_0.<CreatePlatformButtonUpInside>b__0() [0x00000] in /Users/team1/Downloads/testiOSbayards2-6d24bc43fee6abd445ebcaea12b76c61649468a6/FirstApp/UIClasses/AddPlatformTableViewController.cs:115 
at System.Threading.Tasks.Task`1[TResult].InnerInvoke() [0x0000f] in /Library/Frameworks/Xamarin.iOS.framework/Versions/10.10.0.33/src/mono/mcs/class/referencesource/mscorlib/system/threading/Tasks/Future.cs:680 
at System.Threading.Tasks.Task.Execute() [0x00010] in /Library/Frameworks/Xamarin.iOS.framework/Versions/10.10.0.33/src/mono/mcs/class/referencesource/mscorlib/system/threading/Tasks/Task.cs:2502 
—- End of inner exception stack trace —- 
at System.Threading.Tasks.Task.ThrowIfExceptional (System.Boolean includeTaskCanceledExceptions) [0x00011] in /Library/Frameworks/Xamarin.iOS.framework/Versions/10.10.0.33/src/mono/mcs/class/referencesource/mscorlib/system/threading/Tasks/Task.cs:2157 
at System.Threading.Tasks.Task`1[TResult].GetResultCore (System.Boolean waitCompletionNotification) [0x0002b] in /Library/Frameworks/Xamarin.iOS.framework/Versions/10.10.0.33/src/mono/mcs/class/referencesource/mscorlib/system/threading/Tasks/Future.cs:562 
at System.Threading.Tasks.Task`1[TResult].get_Result() [0x00000] in /Library/Frameworks/Xamarin.iOS.framework/Versions/10.10.0.33/src/mono/mcs/class/referencesource/mscorlib/system/threading/Tasks/Future.cs:532 
at FirstApp.AddPlatformTableViewController+<>c__DisplayClass247_1.<CreatePlatformButtonUpInside>b__2() [0x00001] in /Users/team1/Downloads/testiOSbayards2-6d24bc43fee6abd445ebcaea12b76c61649468a6/FirstApp/UIClasses/AddPlatformTableViewController.cs:119 
at Foundation.NSActionDispatcher.Apply() [0x00000] in /Users/builder/data/lanes/4691/3e5ac5ff/source/xamarin-macios/src/Foundation/NSAction.cs:57 
at at (wrapper managed-to-native) UIKit.UIApplication:UIApplicationMain (int,string[],intptr,intptr) 
at UIKit.UIApplication.Main (System.String[] args, System.IntPtr principal, System.IntPtr delegate) [0x00005] in /Users/builder/data/lanes/4691/3e5ac5ff/source/xamarin-macios/src/UIKit/UIApplication.cs:79 
at UIKit.UIApplication.Main (System.String[] args, System.String principalClassName, System.String delegateClassName) [0x00038] in /Users/builder/data/lanes/4691/3e5ac5ff/source/xamarin-macios/src/UIKit/UIApplication.cs:63 
at FirstApp.Application.Main (System.String[] args) [0x00001] in /Users/team1/Downloads/testiOSbayards2-6d24bc43fee6abd445ebcaea12b76c61649468a6/FirstApp/Main.cs:12 

はまた、私は、.NET C#コンパイラを使用してこの方法を再現(モノではない)、手動でウェブデバッグツール(フィドラー)と、すべてがOKです。

更新:

問題が解決されました。画像のサイズが大きすぎる - 18MB。

+0

画像としてコードを投稿しないでください!!!!!!時間を取ってテキストとしてフォーマットします。さらに、AggregateExceptionには、実際に問題の原因となっているものに関する詳細を含むInnerExceptionsコレクションが含まれます。 – Jason

答えて

0

次のコードを試してください。わたしにはできる。それが役に立てば幸い。

public class PostImageData 
    { 
     public int success { get; private set; } 

    public async Task postData(string username, string password,string documentid, StreamContent streamContent) 
    { 
     UploadPhoto details = new UploadPhoto(); 
     try 
     { 
      System.Diagnostics.Debug.WriteLine("uplod done"); 
      var clinet = new HttpClient(); 
      var content = new MultipartFormDataContent(); 
      content.Add(streamContent, "file", "test.jpeg"); 
      System.Net.Http.HttpResponseMessage r =await clinet.PostAsync(YOUR_URL, content);     
      string json =await r.Content.ReadAsStringAsync(); 
      details = JsonConvert.DeserializeObject<UploadPhoto>(json); 
      if (details.message == "Upload success") 
      { 
       success = 200; 
      } 
      success = 200; 
     } 
     catch (Exception e) 
     { 
      Debug.WriteLine(e.Message); 
      success = 400; 
     } 
    } 
    public class UploadPhoto 
    { 
     public string message { get; set; } 
    } 
} 
関連する問題