2017-06-05 28 views
0

我在Visual Studio中遇到了一個問題,同時我爲Android創建了一個應用程序。我嘗試將一些數據(id,key和image)發送到webservice(Django REST框架)並獲得響應。該代碼看起來像將圖像發送到Django在Visual Studio中休息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); 

結果是 「的StatusCode:500,ReasonPhrase: '內部服務器錯誤',1.1版,內容:System.Net.Http.StreamContent,頭:」 如果我使用簡單的東西,例如帶有2個文本輸入和1個文件輸入的html/php表單(或Chrome「Postman」的插件) - 它的工作原理。 有人可以幫我解決這個問題嗎?在郵差 postman request

+1

嗨,你可以添加對'requestItem'class /結構的代碼?端點是否期望請求是「MultiPartForm」?如果您添加了您在郵遞員中發送的請求的屏幕截圖,這將有所幫助。 – woelliJ

+0

您是否嘗試過使用第三方以外的應用程序發佈此Post請求休息請求客戶端,如Postman? – apineda

+0

To @woelliJ嗨。 requestItem是一個包含2個字段的簡單類 - int id和string key。我在郵差中添加了請求的截圖 –

回答

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標頭:

byte[] b = System.IO.File.ReadAllBytes(filePath); 
var imageContent = new ByteArrayContent(b); 
imageContent.Headers.ContentType = MediaTypeHeaderValue.Parse("image/jpeg"); 

formData.Add(imageContent, "image"); 

也許你有額外添加的文件的名稱

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

謝謝。它部分工作(不是內部服務器錯誤)。現在響應是{「image」:[「發送數據不是文件,檢查表單上的編碼類型。」]}我嘗試了formData.Add(new StreamContent(new SystemIO.FileStream(filePath,SystemIO.FileMode.Open )), 「圖片」);但它不起作用。如果你能幫助我,我會很感激。 –

+0

我已經更新了答案。給它一個旋風。 – woelliJ

+0

謝謝,它完全可以工作。 –