【问题标题】:'System.Net.FileWebRequest' can not be casted to 'System.Net.HttpWebRequest' on remote machine, but works locally'System.Net.FileWebRequest' 不能在远程机器上转换为 'System.Net.HttpWebRequest',但在本地工作
【发布时间】:2021-01-21 19:12:36
【问题描述】:

从服务器尝试时出现错误(在服务器上部署了相同的代码):

Unable to cast object of type 'System.Net.FileWebRequest' to type 'System.Net.HttpWebRequest'

但是当我尝试使用本地机器上的相同代码时,它没有给出错误。

HttpWebRequest request = (HttpWebRequest)WebRequest.Create(uri);

各位大侠有什么问题吗?

【问题讨论】:

标签: c# httpwebrequest


【解决方案1】:

传入的 URI 不是 http URI - 它只是一个路径或 file URI。确保 URI 以 http: 开头。如果是相对 URI,则需要将其设为绝对。

【讨论】:

  • 我使用的是 https,这就是问题所在,当我将其更改为使用 http 时,它开始工作了。
【解决方案2】:

WebRequestWebRequest.Create()工厂方法返回的类型,是一个抽象类型。

根据 URL 字符串中识别的协议,它会返回一个有效的子类,例如 FileWebRequestFtpWebRequest

您的代码中的问题是您正在尝试创建对本地文件 (file://) 协议的请求,因此工厂返回 FileWebRequest,但您强制代码认为它是远程 HTTP URL .完全错了

这解释了它仅适用于远程文件而不适用于本地文件的事实

【讨论】:

  • 对于“完全错误”的说法,我会有所不同。考虑使用 FTPS(显式)发送本地文件的用例。在我看来,该框架不应该决定我的实现。
  • 您如何建议是更好的方法。我正在尝试使用本地机器上的文件。
猜你喜欢
  • 1970-01-01
  • 2016-09-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-06-19
  • 1970-01-01
  • 1970-01-01
  • 2023-04-03
相关资源
最近更新 更多