【问题标题】:Setting ContentLength on HttpWebRequest gives me a timeout error在 HttpWebRequest 上设置 ContentLength 会给我一个超时错误
【发布时间】:2019-06-20 15:08:08
【问题描述】:

我正在创建一个使用 C# 和 xamarin 连接到我网站 api 的 android 应用程序。经过一段时间的调试,我意识到当我设置 ContentLength 时,应用接缝会挂起,然后引发 TIMEOUT 异常。

我尝试不设置 ContentLength,但随后正文接缝不随请求一起发送。

public void Post(object data, string route){

    string JSON = JsonConvert.SerializeObject(data);
    var web = (HttpWebRequest)WebRequest.Create("http://httpbin.org/post");
    //web.ContentLenfth = JSON.length;
    web.ContentType = "application/json";
    web.Method = "POST";

    try{
        var sw = new StreamWriter(webRequest.GetRequestStream());
         sw.Write(JSON);

        var webResponse = (HttpWebResponse)webRequest.GetResponse();

        var sr = new StreamReader(webResponse.GetResponseStream());
        var result = sr.ReadToEnd();
        ...
    }
    ...
}

如果设置了 ContentLengt,应用会挂起,直到调用超时函数 否则我发布的测试网址告诉我我没有发送正文

要发送成功的POST 请求,我需要做什么?

【问题讨论】:

    标签: c# asp.net-web-api


    【解决方案1】:

    您应该将长度设置为您要发送的字节数组的长度(而不是字符串的长度)

    您可以通过执行以下操作从 json 字符串中获取字节数组:

    var bytes = Encoding.UTF8.GetBytes(JSON);
    

    然后可以设置内容长度:

    web.ContentLength = bytes.length;
    

    并发送字节:

    using (var requestStream = web.GetRequestStream())
    {
        requestStream.Write(bytes, 0, bytes.Length);
    }
    

    【讨论】:

    • 啊谢谢!几个小时以来,我一直在尝试所有我能找到的东西!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-09-28
    • 2020-06-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-04
    相关资源
    最近更新 更多