昨天一个用户提起这个属性
在开发Htttphelper框架之前我也碰到过类似的问题,
在Post请求时,及时Post内容为0,也需要给ContentLength属性设置一下,否则会请求不成功
这是什么原因呢,下面我们一起来分析一下,首先看一下官方的解释
[C#] 纯文本查看 复制代码 //
// 摘要:
// 获取或设置 Content-lengthHTTP 标头。
//
// 返回结果:
// 要发送到 Internet 资源的数据的字节数。默认值为 -1,该值指示尚未设置该属性,并且没有要发送的请求数据。
//
// 异常:
// System.InvalidOperationException:
// 已通过调用 System.Net.HttpWebRequest.GetRequestStream()、System.Net.HttpWebRequest.BeginGetRequestStream(System.AsyncCallback,System.Object)、System.Net.HttpWebRequest.GetResponse()
// 或 System.Net.HttpWebRequest.BeginGetResponse(System.AsyncCallback,System.Object)
// 方法启动了该请求。
//
// System.ArgumentOutOfRangeException:
// 新的 System.Net.HttpWebRequest.ContentLength 值小于 0。
public override long ContentLength { get; set; }
默认值为 -1 有了这一条,我相信很多人会明白 为什么了,
因为默认值为-1,那么如果服务端要求为0的时候就必须要设置了,
这个我们应该怎么处理呢。
在这里我给出两种方案,第一给一个空字符串,
第二是把Post请求修改为get 请求。因为没有Post数据,再进行Post显然是不适合的。
本来想增加这个属性上去,一直没有确定,因为我担心用户会输入错误,或者会有用户认为是必须要写的。造成麻烦。
在此希望这类用户谅解。也希望大家说说自己的看法,看有没有折中的方法。
|