FileWebRequest无ReadWriteTimeout属性?HTTP请求超时设置代码适配问题
解决FileWebRequest无ReadWriteTimeout属性导致的问题
你的问题核心在于代码没有区分不同协议对应的WebRequest类型差异——FileWebRequest确实不存在ReadWriteTimeout属性,当Uri是file://协议时,直接强制转换会触发异常。
我们可以通过类型校验的方式调整代码,只在请求确认为HttpWebRequest类型时才设置ReadWriteTimeout,修改后的代码如下:
_timeout=150000; protected override WebRequest GetWebRequest(Uri uri) { WebRequest request = base.GetWebRequest(uri); request.Timeout = _timeout; // 仅当请求是HttpWebRequest实例时,才设置ReadWriteTimeout if (request is HttpWebRequest httpRequest) { httpRequest.ReadWriteTimeout = request.Timeout; } return request; }
关键说明:
- 使用模式匹配语法(
is HttpWebRequest httpRequest)替代旧的强制转换,既简洁又能避免类型不匹配时的异常。 FileWebRequest仅需设置Timeout属性即可满足需求,它本身不需要ReadWriteTimeout来控制读写超时,跳过该属性设置完全不影响功能。- 修改后代码对
http:///https://和file://协议的Uri都能正常兼容,不会再出现类型相关的报错。
内容的提问来源于stack exchange,提问作者Ole Albers
相关产品推荐
相关产品推荐

