当我为Android创建应用程序时,我在Visual Studio中遇到了一个问题。我尝试将一些数据(id,key和image)发送到webservice(Django REST框架)并获得响应。代码看起来像那样
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”的插件) - 它可以工作。 有人可以帮我解决这个问题吗?
- 更新 -
requestItem类
public class requestItem
{
public int gameid;
public string key;
public requestItem(int newId, string newKey)
{
gameid = newId;
key = newKey;
}
}
Postman中请求的屏幕截图 postman request
答案 0 :(得分:0)
感谢您使用相关信息更新您的问题。
没有必要序列化您的数据对象(如果您不以任何其他方式使用数据类,则数据类本身就是多余的)
尝试使用此代码:
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);