在Visual Studio Xamarin中将图像发送到Django Rest

时间:2017-06-05 14:06:29

标签: c# android visual-studio post xamarin

当我为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

1 个答案:

答案 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);