senden byte-array per HTTP-POST-in-Shop-app
Ich versuche zu senden, einige Bilder + ein paar meta-Daten zu einem server über HTTP-post, die von einer windows store-app aber nicht weiterkommen, wenn Sie versuchen, um tatsächlich die Daten enthalten, die in der post. Es kann nicht getan werden, die Art und Weise würden Sie dies in einer windows forms-Anwendung oder ähnliches aufgrund der änderungen die store-app-API.
Bekomme ich die Fehlermeldung.
cannot convert source type byte[] to target type System.Net.Http.httpContent
nun, dies ist offensichtlich, weil es 2 verschiedene Typen, die nicht implizit gecastet, aber es ist im Grunde das, was ich Suche, um in der Lage zu tun. Wie mache ich bekomme mein byte-array-Daten in dem httpContent-Typ, so kann ich es im folgenden nennen
httpClient.PostAsync(Uri uri,HttpContent content);
hier meine volle upload-Methode:
async private Task UploadPhotos(List<Photo> photoCollection, string recipient, string format)
{
PhotoDataGroupDTO photoGroupDTO = PhotoSessionMapper.Map(photoCollection);
try
{
var client = new HttpClient();
client.MaxResponseContentBufferSize = 256000;
client.DefaultRequestHeaders.Add("Upload", "Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; WOW64; Trident/6.0)");
//POST action_begin
const string actionBeginUri = "http://localhost:51139/PhotoService.axd?action=Begin";
HttpResponseMessage response = await client.GetAsync(actionBeginUri);
response.EnsureSuccessStatusCode();
string responseBodyAsText = await response.Content.ReadAsStringAsync();
string id = responseBodyAsText;
////
//POST action_upload
Uri actionUploadUri = new Uri("http://localhost:51139/PhotoService.axd?action=Upload&brand={0}&id={1}&name={2}.jpg");
var metaData = new Dictionary<string, string>()
{
{"Id", id},
{"Brand", "M3rror"}, //TODO: Denne tekst skal komme fra en konfigurationsfil.
{"Format", format},
{"Recipient", recipient}
};
string stringData = "";
foreach (string key in metaData.Keys)
{
string value;
metaData.TryGetValue(key, out value);
stringData += key + "=" + value + ",";
}
UTF8Encoding encoding = new UTF8Encoding();
byte[] byteData = encoding.GetBytes(stringData);
HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Post, actionUploadUri);
//send meta data
//TODO get byte data in as content
HttpContent metaDataContent = byteData;
HttpResponseMessage actionUploadResponse = await client.PostAsync(actionUploadUri, metaDataContent);
actionUploadResponse.EnsureSuccessStatusCode();
responseBodyAsText = await actionUploadResponse.Content.ReadAsStringAsync();
//send photos
//TODO get byte data in as content
foreach (byte[] imageData in photoGroupDTO.PhotosData)
{
HttpContent imageContent = imageData;
actionUploadResponse = await client.PostAsync(actionUploadUri, imageContent);
actionUploadResponse.EnsureSuccessStatusCode();
responseBodyAsText = await actionUploadResponse.Content.ReadAsStringAsync();
}
////
//POST action_complete
const string actionCompleteUri = "http://localhost:51139/PhotoService.axd?action=Complete";
HttpResponseMessage actionCompleteResponse = await client.GetAsync(actionCompleteUri);
actionCompleteResponse.EnsureSuccessStatusCode();
responseBodyAsText = await actionCompleteResponse.Content.ReadAsStringAsync();
////
}
catch (HttpRequestException e)
{
}
catch (Exception e)
{
Debug.WriteLine(e.ToString());
}
}
InformationsquelleAutor Essah | 2014-05-07
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wird es einfacher sein zu verwenden
System.Net.Http.ByteArrayContent
. E. g:Nur text mit einem bestimmten text-Codierung verwenden:
Oder wie du oben erwähnt, für text und Bilder mit Hilfe von multipart/form-data:
StringContent
sollte gut genug seinvielen Dank 🙂 @kiewic
InformationsquelleAutor kiewic
Müssen Sie wickeln Sie das byte-array in eine HttpContent geben.
Wenn Sie System,Net.Http.HttpClient:
Wenn Sie die bevorzugte Windows.Web.Http.HttpClient:
Was sollte der server-Seite die Handlungsmuster für die Annahme einer
ByteArrayContent
?InformationsquelleAutor Jon
Dem Konzept, das Sie suchen, heißt Serialisierung. Serialisierung bedeutet die Vorbereitung Ihrer Daten (die könnte heterogen sein und ohne eine VORGEGEBENE Verteilung) für die Speicherung oder übertragung. Dann, wenn Sie Sie brauchen, um die Daten wieder, Sie tun das Gegenteil operation, Deserialisierung, und wieder die ursprüngliche Datenstruktur. Der link oben zeigt einige Methoden auf, wie dies getan werden könnte, in C#.
InformationsquelleAutor Ermir