首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将数据发布到web服务HttpWebRequest Windows Phone 8

将数据发布到web服务HttpWebRequest Windows Phone 8
EN

Stack Overflow用户
提问于 2015-11-13 23:22:02
回答 1查看 28关注 0票数 0

今天,我一直在尝试修改这个示例来发布数据,而不是提供示例GET,但没有成功。

http://blogs.msdn.com/b/andy_wigley/archive/2013/02/07/async-and-await-for-http-networking-on-windows-phone.aspx

我已经替换了这一行:

代码语言:javascript
复制
request.Method = HttpMethod.Get;

使用

代码语言:javascript
复制
 request.Method = HttpMethod.Post;

但是找不到任何方法可以让我流式输入我想要发布的内容。

这个HttpWebRequest看起来比其他方式要干净得多,比如发送委托函数来处理响应。

在Wigley先生的示例代码中,我可以看到POST,所以它一定是可能的

代码语言:javascript
复制
 public static class HttpMethod
    {
        public static string Head { get { return "HEAD"; } }
        public static string Post { get { return "POST"; } }
EN

回答 1

Stack Overflow用户

发布于 2015-11-13 23:32:51

我前段时间写了这个类

代码语言:javascript
复制
  public class JsonSend<I, O>
    {
        bool _parseOutput;
        bool _throwExceptionOnFailure;

        public JsonSend()
            : this(true,true)
        {

        }

        public JsonSend(bool parseOutput, bool throwExceptionOnFailure)
        {
            _parseOutput = parseOutput;
            _throwExceptionOnFailure = throwExceptionOnFailure;
        }

        public async Task<O> DoPostRequest(string url, I input)
        {
            var client = new HttpClient();
            CultureInfo ci = new CultureInfo(Windows.System.UserProfile.GlobalizationPreferences.Languages[0]);

            client.DefaultRequestHeaders.Add("Accept-Language", ci.TwoLetterISOLanguageName);
            var uri = new Uri(string.Format(
                url,
                "action",
                "post",
                DateTime.Now.Ticks
                ));

            string serialized = JsonConvert.SerializeObject(input);

            StringContent stringContent = new StringContent(
                serialized,
                Encoding.UTF8,
                "application/json");

            var response = client.PostAsync(uri, stringContent);

            HttpResponseMessage x = await response;
            HttpContent requestContent = x.Content;
            string jsonContent = requestContent.ReadAsStringAsync().Result;
            if (x.IsSuccessStatusCode == false && _throwExceptionOnFailure)
            {
                throw new Exception(url + " with POST ends with status code " + x.StatusCode + " and content " + jsonContent);
            }

            if (_parseOutput == false){
                return default(O);
            }

            return JsonConvert.DeserializeObject<O>(jsonContent);
        }

        public async Task<O> DoPutRequest(string url, I input)
        {
            var client = new HttpClient();
            CultureInfo ci = new CultureInfo(Windows.System.UserProfile.GlobalizationPreferences.Languages[0]);                    

            client.DefaultRequestHeaders.Add("Accept-Language", ci.TwoLetterISOLanguageName);
            var uri = new Uri(string.Format(
                url,
                "action",
                "put",
                DateTime.Now.Ticks
                ));

            string serializedObject = JsonConvert.SerializeObject(input);
            var response = client.PutAsync(uri,
            new StringContent(
                serializedObject,
                Encoding.UTF8,
                "application/json"));

            HttpResponseMessage x = await response;
            HttpContent requestContent = x.Content;
            string jsonContent = requestContent.ReadAsStringAsync().Result;

            if (x.IsSuccessStatusCode == false && _throwExceptionOnFailure)
            {
                throw new Exception(url + " with PUT ends with status code " + x.StatusCode + " and content " + jsonContent);
            }

            if (_parseOutput == false){
                return default(O);
            }

            return JsonConvert.DeserializeObject<O>(jsonContent);
        }
    }

然后,当我想调用它时,我可以使用它,如下所示:

代码语言:javascript
复制
JsonSend<User, RegistrationReceived> register = new JsonSend<User, RegistrationReceived>();
RegistrationReceived responseUser = await register.DoPostRequest("http://myurl", user);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33696035

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档