使用HttpClient编写表单数据

时间:2014-05-21 11:45:42

标签: c# windows-phone-8

我想从Windows Phone 8应用程序将表单数据发送到我的网络服务器。数据包含要上载的文件和其他一些字符串(key = value)。

文件的撰写和发送工作正常。但是,如何将我的字符串添加到发送内容?

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");

我想添加到我的表单数据中的一些对......有什么帮助吗?

2 个答案:

答案 0 :(得分:1)

自己动手:

content.Add(new StringContent("value_string"), "\"key_string\"");
content.Add(CreateFileContent(mStream, mFilename, "image/jpeg"));
这是有效的。记住我的帮助函数CreateFileContent

答案 1 :(得分: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));

Haven自己测试了这个(使用Multipart),但是使用FormUrlEncodedContent它对我来说很好。