Я хочу отправить данные формы на свой веб-сервер из приложения 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");
Я хочу добавить в свои данные формы некоторые из этих пар... Любая помощь?
Получил это самостоятельно:
content.Add(new StringContent("value_string"), "\"key_string\"");
content.Add(CreateFileContent(mStream, mFilename, "image/jpeg"));
это работает. Вспомните мою вспомогательную функцию CreateFileContent
.
Попробуй это:
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
он отлично работает для меня.