2017-06-07 38 views
0

iOSXamarin Formsに作成しました。HttpClientは、デバイスから自分のサーバーに画像を送信する機能です。中核機能はXamarinフォーム、AndroidおよびHttpClientの問題

var content = new MultipartFormDataContent(); 

var fileContent = new ByteArrayContent(fileBytes); 
fileContent.Headers.ContentType = MediaTypeHeaderValue.Parse("multipart/form-data"); 
fileContent.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment") 
{ 
    FileName = fName 
}; 
fileContent.Headers.ContentDisposition.Parameters 
        .Add(new NameValueHeaderValue("userId", UserId.ToString())); 
content.Add(fileContent); 

using (var client = new HttpClient()) { 
    client.DefaultRequestHeaders.Add("authenticationToken", SyncData.Token); 

    HttpResponseMessage response = await client.PostAsync(url, content); 
    if (response.IsSuccessStatusCode) 
    { 
     // more code 
    } 
} 

私はSystem.Net.Httpを使用しています。私はAndroidのプロジェクトに同じ機能を使用しようとしましたが、驚くことに機能しません。問題はヘッダーにあります:私が調べるならば、fileContent私はすべてのキーを見ることができますが、サーバ上のwebapiにはFileNameが届きません。

いくつかログインした後、私は今WEBAPIがFileNameのparamを受けclient.DefaultRequestHeaders

client.DefaultRequestHeaders.Add("FileName", fName); 

ようなより多くの追加この機能を変更しました。

私の質問は何ですか:私は間違っていましたか?

答えて

0

個人的には、ファイル名を受け入れるMultipartFormDataContentのAddメソッドを使用します。

var content = new MultipartFormDataContent(); 
var fileContent = new ByteArrayContent(fileBytes); 

... 

// Use the overload Add method which accepts a file name 
content.Add(fileContent, "FileName", fName); 

... 

これがあなたの問題を解決するかどうかはわかりませんが、それは私にとってはうまくいきます。

+0

ありがとう@ deckerton_9000、私は 'client.DefaultRequestHeaders.Add(" FileName "、fName);で問題を解決しました。私の問題は、iOSとAndroidの間で 'httpclient'を共有することができません。 – Enrico

+0

ナゲットパッケージ" Microsoft.Net.Http "の使用を検討しましたか? AndroidとiOSの両方で互換性があります。注意:ネームスペースの衝突やバインディングのリダイレクトを避けるために、このナゲットを追加する前に、System.Net.Httpへのプロジェクト参照を削除する必要があります。 –

+0

ポータブルクラスライブラリを使用する場合は、AndroidとiOSの間でHttpClientコードを最も確実に共有できます。 –

関連する問題