составление данных формы с помощью HttpClient

1

Я хочу отправить данные формы на свой веб-сервер из приложения Windows Phone 8. Данные содержат файл для загрузки и дополнительные строки (ключ = значение).

Составление и отправка файла отлично работает. Но как я могу добавить свои строки в отправляемый контент?

string mServerUrl = @"http://www.myserver/reveiver.asp";
_ImageMemoryStream.Position = 0;
MultipartFormDataContent content = new MultipartFormDataContent();
content.Add(CreateFileContent(_ImageMemoryStream, "uploadedphoto.jpg", "image/jpeg"));

HttpClient mHttpClient = new HttpClient();
HttpResponseMessage mResponse = null;
mResponse = await mHttpClient.PostAsync(mServerUrl, content);
string responseBodyAsText = await mResponse.Content.ReadAsStringAsync();
if (mResponse.StatusCode == HttpStatusCode.OK)
{
    txtError.Text = "OK:" + responseBodyAsText;
}
else
{
    txtError.Text = "ERROR (" + mResponse.StatusCode + "):\n" + mResponse.ReasonPhrase;
}

Помощник для компоновки файла:

private StreamContent CreateFileContent(Stream stream, string fileName, string contentType)
{
    var fileContent = new StreamContent(stream);
    fileContent.Headers.ContentDisposition = new ContentDispositionHeaderValue("form-data")
    {
        Name = "\"file\"",
        FileName = "\"" + fileName + "\""
    };
    fileContent.Headers.ContentType = new MediaTypeHeaderValue(contentType);
    return fileContent;
}

Добавление моей пары ключ/значение таким образом не подходит:

content.Add("key", "value");

Я хочу добавить в свои данные формы некоторые из этих пар... Любая помощь?

Теги:
windows-phone-8

2 ответа

1
Лучший ответ

Получил это самостоятельно:

content.Add(new StringContent("value_string"), "\"key_string\"");
content.Add(CreateFileContent(mStream, mFilename, "image/jpeg"));

это работает. Вспомните мою вспомогательную функцию CreateFileContent.

0

Попробуй это:

List<KeyValuePair<string, string>> keyvaluePairs = new List<KeyValuePair<string,string>>();
KeyValuePair<string, string> keyvalue = new KeyValuePair<string, string>("key", "value");
keyvaluePairs.Add(keyvalue);
MultipartFormDataContent content = new MultipartFormDataContent();
content.Add(new FormUrlEncodedContent(keyvaluePairs));

Не проверял это сам (с Multipart), но с FormUrlEncodedContent он отлично работает для меня.

  • 0
    Нет, это не работает для меня. При добавлении этого после изображения даже изображение не читается должным образом на сервере, а при добавлении перед изображением значения ключа и ключа не переопределяются серверным сценарием.
  • 0
    Я не могу комментировать ваше собственное решение, но хорошо, что вы узнали, что сервер ожидает в качестве отправляемых значений.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню