POST 紧凑框架中的 HttpWebRequest

POST HttpWebRequest in compact framework

我正在紧凑型框架中开发应用程序,需要发送 POST 一个 Json 到服务器

    public SResponse SaveDoc(Document document)
    {
        var url = WorkSettings.URL + "savedoc/" + document.DocType + "/" + document.DocNumber;
        string json = JsonConvert.SerializeObject(document);

        HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
        request.KeepAlive = false;
        request.ProtocolVersion = HttpVersion.Version10;
        request.Method = "POST";

        // turn our request string into a byte stream
        byte[] postBytes;

        if (json != null)
        {
            postBytes = Encoding.UTF8.GetBytes(json);
        }
        else
        {
            postBytes = new byte[0];
        }

        request.ContentType = "application/x-www-form-urlencoded";
        request.ContentLength = postBytes.Length;

        Stream requestStream = request.GetRequestStream();

        // now send it
        requestStream.Write(postBytes, 0, postBytes.Length);
        requestStream.Close();

        HttpWebResponse response;

        response = (HttpWebResponse)request.GetResponse();

        return GetResponseData(response);

    }

异常错误

This request requires buffering of data for authentication or redirection to be successful.

我自己更熟悉 HttpClient 并且从未使用过 HttpWebRequest,但是我收到的任何处理重定向的错误都可以通过确保您的 URL 完全正确来快速解决。

var url = WorkSettings.URL + "savedoc/" + document.DocType + "/" + document.DocNumber

确保上面的 URL 正是您要保存到的 URL。也许您在发生错误的 URL 中添加了一个额外的“/”?或者您可能需要在 url 的末尾附加“.php”或“.html”。

如果您无法调试代码以逐步了解这个确切的 URL 是什么,您也可以在发生重定向请求时使用 Wireshark 或 Fiddler 视图。

其他需要考虑的问题:

1) 如果发送错误的URL,是否希望出现auto-redirects?可能,但也许不是。如果不是,值得指出的是 HttpWebRequest 的 AutoRedirect property 默认设置为 true。

2) 是否要专门处理这个错误?或者错误可能不是由 URL 稍微不正确引起的。如果是这样,我没有太多处理此错误的个人经验。也许 this Whosebug post 有一个非常简单的解决方案可以解决问题。