2017-06-05 9 views
0

Android用アプリを作成しているうちにVisual Studioで1つの問題が発生しました。私はWebサービス(Django RESTフレームワーク)にいくつかのデータ(ID、キー、イメージ)を送り、応答を得ようとします。私はシンプルなものを使用している場合は、 ":、のreasonPhrase 500: '内部サーバーエラー'、バージョン1.1、内容::System.Net.Http.StreamContent、ヘッダのStatusCode" というビジュアルスタジオのDjango Restに画像を送信するXamarin

string requestUri = "https://www.haremtravel.com/api/new"; 
requestItem item = new requestItem(itemType,itemKey); 
var json = JsonConvert.SerializeObject(item); 
byte[] b = SystemIO.File.ReadAllBytes(filePath); 
HttpContent stringContent = new StringContent(json); 
HttpContent fileByteContent = new ByteArrayContent(b);  
var formData = new MultipartFormDataContent(); 
formData.Add(stringContent); 
formData.Add(fileByteContent); 
HttpClient httpClient = new HttpClient(); 
var responseObj = httpClient.PostAsync(requestUri, formData); 

結果のようなコードを見ては、たとえば、2つのテキスト入力と1つのファイル入力(またはChrome "Postman"のプラグイン)を持つhtml/phpフォーム - これは動作します。 誰でもこの問題で私を助けることができますか?関連情報をあなたの質問を更新してくれてありがとうpostman request

+1

こんにちは、あなたは 'requestItem'class /構造体のコードを追加することができ、ファイルの名前を追加する必要がありますか?エンドポイントは要求が 'MultiPartForm'であると期待していますか?郵便配達員のリクエストのスクリーンショットを追加すると役立ちます。 – woelliJ

+0

郵便配達員のような第三者から依頼依頼を受けたクライアントを使って、この投稿依頼をアプリの外で試しましたか? – apineda

+0

To @woelliJこんにちは。 requestItemは、int idとstring keyという2つのフィールドを持つ単純なクラスです。郵便配達員のリクエストのスクリーンショットを –

答えて

0

ポストマン における要求の


--UPDATED--

requestItemクラス

public class requestItem 
{ 
    public int gameid; 
    public string key; 
    public requestItem(int newId, string newKey) 
    { 
     gameid = newId; 
     key = newKey; 
    } 
} 

スクリーンショット。

それは(あなたがそれを他の方法を使用していない場合は、データクラス自体が冗長である)

は、このコードでそれを試してみてください、あなたのデータオブジェクトをシリアル化する必要はありません。

 string requestUri = "https://www.haremtravel.com/api/new"; 
     requestItem item = new requestItem(itemType, itemKey); 

     byte[] b = System.IO.File.ReadAllBytes(filePath); 

     MultipartFormDataContent formData = new MultipartFormDataContent(); 

     formData.Add(new StringContent(item.gameid.ToString()), "gameid"); 
     formData.Add(new StringContent(item.key), "key"); 
     formData.Add(new ByteArrayContent(b, 0, b.Count()), "image"); 

     HttpClient httpClient = new HttpClient(); 
     var responseObj = httpClient.PostAsync(requestUri, formData); 

ファイルのアップロード:

:でたContentTypeヘッダーを追加

てみてください3210

多分あなたは、さらに

string fileName = GetFileNameWithExtensionSomehow(filePath); 
formData.Add(imageContent, "image", fileName); 
+0

ありがとうございます。これは部分的に機能します(内部サーバーエラーではありません)。私はフォームのコードのタイプをチェックしました。]}私は、FormData.Addを試しました(新しいStreamContent(新しいSystemIO.FileStream(filePath、SystemIO.FileMode.Open ))、 "image");しかしそれはあまりにも機能しません。もしもあなたがこれを手伝ってくれれば嬉しいです。 –

+0

私は答えを更新しました。やってみて。 – woelliJ

+0

ありがとうございます、それは完全に動作します。 –

関連する問題