【问题标题】:WebRequest Not Working网络请求不工作
【发布时间】:2013-10-10 09:28:55
【问题描述】:

以下代码在 WinForms 和 Windows Phone 8 应用程序中返回错误。

代码

    var jsonData = "jsonStringGoesHere";
    var uri = new Uri("urlGoesHere");
    var webRequest = (HttpWebRequest)WebRequest.Create(uri);
    webRequest.Method = "POST";
    webRequest.ContentType = "application/json";
    webRequest.ContentLength = jsonData.Length;
    webRequest.BeginGetRequestStream(ar =>
    {
        try
        {
            using (var os = webRequest.EndGetRequestStream(ar))
            {
                var postData = Encoding.UTF8.GetBytes(jsonData);
                os.Write(postData, 0, postData.Length);
            }
        }
        catch (Exception ex)
        {
            Debug.WriteLine(ex);
        }

        webRequest.BeginGetResponse(
            ar2 =>
            {
                try
                {
                    using (var response = webRequest.EndGetResponse(ar2))
                    using (var reader = new StreamReader(response.GetResponseStream()))
                    {
                        var received = reader.ReadToEnd();
                    }
                }
                catch (Exception ex)
                {
                    Debug.WriteLine(ex);
                }
            }, null);
    }, null);

错误 在 WinForms 中:[System.Net.WebException] = {"The remote server returned an error: (400) Bad Request."}

在 WP8 中The remote server returned an error: NotFound

WCF 服务运行良好,因为我已让它们在 Fiddler 和其他类型的应用程序(如 Android/iPhone)中运行。

为什么这不起作用?

【问题讨论】:

  • 你的服务器不喜欢你。比较 Fiddler 中的请求。
  • 我比较过。它们完全相同。
  • 为什么这行不通:(:(:(:(:((:
  • 肯定有什么不同。检查标题等是否相同。如果您从 Fiddlers Composer 调用该方法,它会起作用吗?可以分享你的网址吗?
  • 不幸的是,我无法共享 URL,但是当我在 Fiddler 中发出请求时,JSON 正文完全相同,并且 C# 代码中的标头也相同,我使用的是 UTF -8 和 application/json... 与 Fiddler 请求相同... 只是没有意义。

标签: c# json wcf webrequest


【解决方案1】:

如果我没记错的话,我想我遇到了类似的事情。我以为它与 ContentLength 有关,但我真的不记得了。

这是我最终使用的代码。不确定是否有帮助。

HttpWebRequest request = (HttpWebRequest)WebRequest.Create(uri);
request.Method = "POST";
request.ContentType = "application/json";
string json = BuildJSON(TestConvert(tests));
var enc = new UTF8Encoding(false);
request.ContentLength = enc.GetByteCount(json);
using (StreamWriter requestWriter = new StreamWriter(request.GetRequestStream(), enc))
{
    requestWriter.Write(json);
    requestWriter.Close();
}

【讨论】:

  • 我做不到。 GetRequestStream() 不是 WP8/Silverlight 的一部分。我只能使用我正在使用的 BeginGetRequestStream。
  • 我主要是为var enc = new UTF8Encoding(false); webRequest.ContentLength = enc.GetByteCount(jsonData); 发布它应该缩小范围抱歉。
猜你喜欢
  • 1970-01-01
  • 2020-12-18
  • 2015-07-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-18
相关资源
最近更新 更多