HttpWebRequest.Create() is kind of a static factory. You cannot override the behaviour in a derived class. Depending on the URI you provide, it can create a HttpWebRequest or a FtpWebRequest. Which are derived from WebRequest. When you know you're creating a Http request, then i suggest you do the following:
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(uri)
or
var request = (HttpWebRequest)WebRequest.Create(uri)
When you want to access the special properties/methods of the derived class which aren't available in the base class, you have to do this cast.
e.g. KeepAlive
is not available in the WebRequest base class because it belongs to HttpWebRequest.
Other properties like Method
is defined in the base class and therefore you don't need the cast.