开发者社区 问答 正文

从传输流收到意外的 EOF 或 0 个字节


asp.net post 发送消息时提示:从传输流收到意外的 EOF 或 0 个字节


POST代码:
//string url = https : //oapi.dingtalk.com/message/send?access_token=" + tokenstring;
//string param = "{\"touser\":\"@all\",\"agentid\":\"13089916\",\"msgtype\":\"text\",\"text\":{\"content\":\"查询查询查询\"}}":


    public static string Post(string url, string param)
    {
        string strURL = url;
        System.Net.HttpWebRequest request;
        request = (System.Net.HttpWebRequest)WebRequest.Create(strURL);
        request.Method = "POST";
        request.ContentType = "application/json;charset=UTF-8";
        string paraUrlCoded = param;
        byte[] payload;
        payload = System.Text.Encoding.UTF8.GetBytes(paraUrlCoded);
        request.ContentLength = payload.Length;
        Stream writer = request.GetRequestStream();
        writer.Write(payload, 0, payload.Length);
        writer.Close();
        System.Net.HttpWebResponse response;
        response = (System.Net.HttpWebResponse)request.GetResponse();
        System.IO.Stream s;
        s = response.GetResponseStream();
        string StrDate = "";
        string strValue = "";
        StreamReader Reader = new StreamReader(s, Encoding.UTF8);
        while ((StrDate = Reader.ReadLine()) != null)
        {
            strValue += StrDate + "\r\n";
        }
        return strValue;
    }





展开
收起
莽子娃儿 2016-03-02 00:02:54 10902 分享 版权
阿里云 AI 助理回答

遇到“从传输流收到意外的 EOF 或 0 个字节”的错误,通常意味着在尝试读取响应数据时,服务器没有返回预期的数据或者连接被提前关闭。这可能是由于多种原因造成的,包括但不限于网络问题、服务器端错误、请求格式不正确或超时设置不当等。针对您的情况,可以尝试以下几个解决方法:

  1. 检查URL和参数:确保您的URL(特别是access_token部分)是正确的,并且POST的JSON字符串格式无误。您提供的代码片段中,URL和参数字符串似乎被截断了,请确认实际使用时它们是完整的。

  2. 添加异常处理:在获取响应和读取响应流的地方增加异常处理逻辑,这样可以帮助定位问题所在。例如,在GetResponse()和读取流的操作后添加try-catch块。

  3. 设置超时时间:为HttpWebRequest对象显式设置超时时间,以防长时间等待无响应导致的问题。可以通过request.Timeout = yourTimeoutValue;来设置超时时间(单位为毫秒)。

  4. 检查Content-Length:虽然您的代码已经设置了Content-Length,但确保它与实际发送的数据长度一致。不过,如果使用的是chunked编码,不需要手动设置Content-Length。

  5. 使用HTTP客户端类:考虑使用更现代的HttpClient类替代HttpWebRequest,HttpClient在处理HTTP请求方面提供了更好的性能和易用性。例如:

using (var client = new HttpClient())
{
    client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
    var content = new StringContent(param, Encoding.UTF8, "application/json");
    var response = await client.PostAsync(url, content);
    response.EnsureSuccessStatusCode();
    return await response.Content.ReadAsStringAsync();
}
  1. 查看服务器日志:同时,查看服务器端的日志,了解是否有错误信息记录,这有助于判断问题是否发生在服务器端。

  2. 检查防火墙和网络配置:确保没有防火墙或网络配置阻止了请求或响应的正常传输。

通过上述步骤,应该能帮助您定位并解决问题。如果问题依旧,可能需要更详细的错误信息或日志来进行进一步分析。

有帮助
无帮助
AI 助理回答生成答案可能存在不准确,仅供参考
0 条回答
写回答
取消 提交回答