J'ai créé en Xamarin Forms
pour iOS
une fonction HttpClient
pour envoyer une image de l'appareil à mon serveur. La fonction de base estXamarin Forms, Android et HttpClient issue
var content = new MultipartFormDataContent();
var fileContent = new ByteArrayContent(fileBytes);
fileContent.Headers.ContentType = MediaTypeHeaderValue.Parse("multipart/form-data");
fileContent.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment")
{
FileName = fName
};
fileContent.Headers.ContentDisposition.Parameters
.Add(new NameValueHeaderValue("userId", UserId.ToString()));
content.Add(fileContent);
using (var client = new HttpClient()) {
client.DefaultRequestHeaders.Add("authenticationToken", SyncData.Token);
HttpResponseMessage response = await client.PostAsync(url, content);
if (response.IsSuccessStatusCode)
{
// more code
}
}
J'utilise System.Net.Http
. J'ai essayé d'utiliser la même fonction pour un projet sous Android mais étonnamment ça ne marche pas. Le problème est dans l'en-tête: si j'inspecte fileContent
je peux voir toutes les clés mais pour webapi sur le serveur FileName
n'est pas reçu.
Après quelques journaux, j'ai changé cette fonction en ajoutant plus client.DefaultRequestHeaders
comme
client.DefaultRequestHeaders.Add("FileName", fName);
Maintenant, le WebAPI reçoit FileName
param. Maintenant, ma question est: qu'est-ce que je me suis trompé?
Merci @ deckerton_9000, j'ai résolu le problème avec 'client.DefaultRequestHeaders.Add (" FileName ", fName);'. Mon problème est que je ne peux pas avoir mon 'httpclient' partagé entre iOS et Android – Enrico
Avez-vous envisagé d'utiliser le paquet nuget" Microsoft.Net.Http "? Cela devrait être compatible pour Android et iOS. Remarque: vous devrez supprimer les références de projet à System.Net.Http avant d'ajouter ce nuget pour éviter les collisions d'espaces de noms et les redirections de liaison. –
Si vous utilisez une bibliothèque de classes portable, vous pouvez très certainement partager le code HttpClient entre Android et iOS. –