Vi este fragmento de código:
var request = (HttpWebRequest) WebRequest.Create("http://www.google.com");
¿Por qué necesitas lanzar (HttpWebRequest)
? ¿Por qué no usar HttpWebRequest.Create
? ¿Y por qué hace HttpWebRequest.Create
a WebRequest
, no a HttpWebRequest
?
c#
httpwebrequest
Desconocido
fuente
fuente
Respuestas:
El
Create
método es estático y solo existe enWebRequest
. Llamarlo comoHttpWebRequest.Create
puede parecer diferente, pero en realidad está compilado para llamarWebRequest.Create
. Solo parece estar encendidoHttpWebRequest
debido a la herencia.El
Create
método utiliza internamente el patrón de fábrica para realizar la creación real de objetos, en función de lo queUri
le pasa. De hecho, podría recuperar otros objetos, como unFtpWebRequest
oFileWebRequest
, según elUri
.fuente
WebRequest.CreateHttp
está en 4.5WebRequest
es una clase abstracta, que tiene un método de fábricaCreate
que, dependiendo de la URL pasada, crea una instancia de una subclase concreta. Si lo necesita o desea enHttpWebRequest httpreq = (HttpWebRequest)WebRequest.Create(strUrl);
lugar deWebRequest req = WebRequest.Create(strUrl);
depende de sus necesidades y del tipo de URL que ingrese.Si solo pasa HTTP: URL, entonces el código anterior le permite acceder a las propiedades y métodos que
HttpWebRequest
implementa la subclase además de los definidos en la clase baseWebRequest
. Pero si pasa en un FTP: URL, el intento de transmisiónHttpWebRequest
fallará.Este último es genérico y no fallará en ninguno de los tipos de URL compatibles, 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
fuente
El elenco solo es necesario cuando necesita acceso a miembros exclusivos de HttpWebRequest. La idea es que si las propiedades / métodos admitidos en WebRequest son suficientes, entonces puede escribir una aplicación que funcione con muchos tipos de protocolos de solicitud / respuesta. En este caso, el URI podría ser algo proporcionado por el usuario utilizando cualquier protocolo compatible con protocolos conectables. Incluso se pueden admitir nuevos protocolos sin alterar el software original.
Si su aplicación necesita más control sobre las características específicas de un protocolo en particular, puede restringir requestUri a sus esquemas admitidos y enviar WebRequest a la subclase específica del protocolo correspondiente. Esto limita los protocolos admitidos por su aplicación, pero le permite modificar funciones específicas del protocolo.
fuente