C# 将图像发送到VisualStudio Xamarin中的Django Rest
在为Android创建应用程序时,我在Visual Studio中遇到了一个问题。我尝试将一些数据(id、密钥和图像)发送到webservice(Django REST框架)并获得响应。代码是这样的C# 将图像发送到VisualStudio Xamarin中的Django Rest,c#,android,visual-studio,post,xamarin,C#,Android,Visual Studio,Post,Xamarin,在为Android创建应用程序时,我在Visual Studio中遇到了一个问题。我尝试将一些数据(id、密钥和图像)发送到webservice(Django REST框架)并获得响应。代码是这样的 string requestUri = "https://www.haremtravel.com/api/new"; requestItem item = new requestItem(itemType,itemKey); var json = JsonConvert.SerializeObjec
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);
结果是“状态代码:500,原因短语:'内部服务器错误',版本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;
}
}
《邮差》中的请求截图
感谢您用相关信息更新您的问题 无需序列化数据对象(如果不以任何其他方式使用数据类,则该数据类本身是冗余的) 请使用以下代码进行尝试:
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);
您好,您能为
requestItem
class/struct添加代码吗?端点是否希望请求是一个多部分表单
?如果您在postman中添加了请求的屏幕截图,这会有所帮助。您是否在应用程序之外尝试过此Post请求,使用第三方Rest请求客户端(如postman)将其发送到@woelliJ Hi。requestItem是一个简单的类,有两个字段-int-id和string-key。我在postmanTo@apineda Hi中添加了请求的屏幕截图。对我在《邮递员》里试过。它显示正确result@AdeptusMechanicus恐怕我看不到截图。如果你没有发布你的requestItem
类的代码,我不能说这是否是序列化的问题,谢谢。它部分工作(不是内部服务器错误)。现在的响应是{“image”:[“发送的数据不是文件。请检查表单上的编码类型。”]}我尝试了formData.Add(new StreamContent(new SystemIO.FileStream(filePath,SystemIO.FileMode.Open)),“image”);但它也不起作用。如果你也能帮我,我将不胜感激。我很高兴能帮上忙。请随意将我的答案标记为“正确”答案;)