向WebRequest注册自定义协议
本文关键字:协议 自定义 注册 WebRequest | 更新日期: 2023-09-27 18:19:31
我访问的web服务器需要自定义协议,而不是url中的http。我已经尝试注册我的协议,但没有太多关于如何使其发挥作用的文档。web服务器提供标准的HTTP响应,但如果请求前没有用custom://而不是HTTP://,它将无法工作。我只想按原样使用WebRequest底层功能,因为这最终是HTTP,但是,我需要一种使用自定义协议url提交请求的方法。我是这样注册的:
WebRequest.RegisterPrefix("custom", new CustomWebRequestCreator());
但是,当我创建WebRequest时,它会在以下代码之后返回我的自定义类:
Uri uri = new Uri("custom://192.168.0.122:94934/resource");
System.Net.WebRequest request = WebRequest.Create(uri);
调试器说请求实际上是我的自定义类,但随后我得到了这个异常:
System.NotImplementedException was unhandled
HResult=-2147467263
Message=This method is not implemented by this class.
Source=System
StackTrace:
at System.Net.WebRequest.GetResponse()
...
当我试图在不注册前缀的情况下将我的URL传递给WebRequest.Create()时,我会得到以下异常:
System.NotSupportedException was unhandled
HResult=-2146233067
Message=The URI prefix is not recognized.
Source=System
StackTrace:
at System.Net.WebRequest.Create(Uri requestUri, Boolean useUriBase)
at System.Net.WebRequest.Create(Uri requestUri)
...
你知道我该怎么做吗?
这似乎不可能,或者可能达到从头开始为WebRequest重新实现HTTP的复杂程度。
我建议您创建一个TCP中继,使用WebRequest连接到它[http://localhost/resource],以便在不试图扭曲WebRequest的情况下使其工作。中继将依次转发到TCP套接字192.168.0.122:94934。
对于中继,您可以使用通用且简化的WebRequest对象。如果是针对控制台/webforms应用程序,则当应用程序启动时,中继可以在另一个线程上启动(也可以异步启动)。