ejemplo - C#HttpWebRequest versus WebRequest
webrequest post parameters c# (3)
El elenco solo es necesario cuando necesitas acceder a miembros exclusivos de HttpWebRequest. La idea es que si las propiedades / métodos soportados en WebRequest son suficientes, entonces puede escribir una aplicación que funcionará contra muchos tipos de protocolos de solicitud / respuesta. En este caso, el URI podría ser algo dado por el usuario utilizando cualquier protocolo compatible con protocolos conectables. Los nuevos protocolos incluso pueden ser compatibles sin alterar el software original.
Si su aplicación necesita más control sobre características específicas de un protocolo en particular, entonces puede restringir requestUri a su (s) esquema (s) soportado (s) y convertir WebRequest a la subclase específica de protocolo apropiada. Esto limita los protocolos admitidos por su aplicación, pero le permite modificar las características específicas del protocolo.
Vi esta pieza de código:
var request = (HttpWebRequest) WebRequest.Create("http://www.google.com");
¿Por qué necesitas lanzar (HttpWebRequest)
? ¿Por qué no usar simplemente HttpWebRequest.Create
? ¿Y por qué HttpWebRequest.Create
hace una WebRequest
, no una HttpWebRequest
?
El método Create
es estático y solo existe en WebRequest
. Llamarlo como HttpWebRequest.Create
puede ser diferente, pero en realidad se compila para llamar a WebRequest.Create
. Solo parece estar en HttpWebRequest
debido a la herencia.
El método Create
internamente, usa el patrón de fábrica para hacer la creación real de objetos, en función de la Uri
le pasas. En realidad, puede recuperar otros objetos, como FtpWebRequest
o FileWebRequest
, según el Uri
.
WebRequest
es una clase abstracta, que tiene un método de fábrica. Create
eso, dependiendo de la URL pasada, crea una instancia de una subclase concreta. Si necesita o quiere HttpWebRequest httpreq = (HttpWebRequest)WebRequest.Create(strUrl);
en lugar de WebRequest req = WebRequest.Create(strUrl);
Depende de sus necesidades y del tipo de URL que ingrese.
Si solo pasa en HTTP: URL, entonces el código anterior le permite acceder a las propiedades y métodos que implementa la subclase HttpWebRequest
además de los definidos en la clase base WebRequest
. Pero si pasa en un FTP: URL, el intento de HttpWebRequest
a HttpWebRequest
fallará.
Este último es genérico y no fallará en ninguno de los tipos de URL soportadas, pero por supuesto, sin conversión a ninguna subclase, solo puede acceder a las propiedades y métodos que define la clase base.
- a través de Martin Honnen