using System.Net.Security;
using System.Net.Cache;
using System.Security.Principal;
-#if NET_4_5
using System.Threading.Tasks;
-#endif
#if NET_2_1
using ConfigurationException = System.ArgumentException;
static bool isDefaultWebProxySet;
static IWebProxy defaultWebProxy;
static RequestCachePolicy defaultCachePolicy;
-
- // Constructors
-
+
static WebRequest ()
{
-#if NET_2_1
+#if MOBILE
IWebRequestCreate http = new HttpRequestCreator ();
RegisterPrefix ("http", http);
RegisterPrefix ("https", http);
- #if MOBILE
RegisterPrefix ("file", new FileWebRequestCreator ());
RegisterPrefix ("ftp", new FtpRequestCreator ());
- #endif
#else
- defaultCachePolicy = new HttpRequestCachePolicy (HttpRequestCacheLevel.NoCacheNoStore);
#if CONFIGURATION_DEP
object cfg = ConfigurationManager.GetSection ("system.net/webRequestModules");
WebRequestModulesSection s = cfg as WebRequestModulesSection;
authentication_level = value;
}
}
-
- [MonoTODO ("Implement the caching system. Currently always returns a policy with the NoCacheNoStore level")]
- public virtual RequestCachePolicy CachePolicy
- {
- get { return DefaultCachePolicy; }
- set {
- }
- }
public virtual string ConnectionGroupName {
get { throw GetMustImplement (); }
set { throw GetMustImplement (); }
}
- public static RequestCachePolicy DefaultCachePolicy
+ [MonoTODO ("Implement the caching system. Currently always returns a policy with the NoCacheNoStore level")]
+ public virtual RequestCachePolicy CachePolicy
{
- get { return defaultCachePolicy; }
+ get { return DefaultCachePolicy; }
+ set {
+ }
+ }
+
+ public static RequestCachePolicy DefaultCachePolicy {
+ get {
+ return defaultCachePolicy ?? (defaultCachePolicy = new HttpRequestCachePolicy (HttpRequestCacheLevel.NoCacheNoStore));
+ }
set {
throw GetMustImplement ();
}
set { throw GetMustImplement (); }
}
- public TokenImpersonationLevel ImpersonationLevel {
- get { throw GetMustImplement (); }
- set { throw GetMustImplement (); }
- }
public virtual string Method {
get { throw GetMustImplement (); }
throw GetMustImplement ();
}
}
-
+
+ public TokenImpersonationLevel ImpersonationLevel { get; set; }
+
// volatile static IWebProxy proxy;
static readonly object lockobj = new object ();
isDefaultWebProxySet = true;
}
}
+
+ internal static IWebProxy InternalDefaultWebProxy {
+ get {
+ return DefaultWebProxy;
+ }
+ }
+
[MonoTODO("Needs to respect Module, Proxy.AutoDetect, and Proxy.ScriptLocation config settings")]
static IWebProxy GetDefaultWebProxy ()
throw new ArgumentNullException ("requestUri");
return GetCreator (requestUri.Scheme).Create (requestUri);
}
-#if NET_4_5 || MOBILE
- [MonoTODO ("for portable library support")]
+ static HttpWebRequest SharedCreateHttp (Uri uri)
+ {
+ if (uri.Scheme != "http" && uri.Scheme != "https")
+ throw new NotSupportedException ("The uri should start with http or https");
+
+ return new HttpWebRequest (uri);
+ }
+
public static HttpWebRequest CreateHttp (string requestUriString)
{
- throw new NotImplementedException ();
+ if (requestUriString == null)
+ throw new ArgumentNullException ("requestUriString");
+ return SharedCreateHttp (new Uri (requestUriString));
}
- [MonoTODO ("for portable library support")]
public static HttpWebRequest CreateHttp (Uri requestUri)
{
- throw new NotImplementedException ();
+ if (requestUri == null)
+ throw new ArgumentNullException ("requestUri");
+ return SharedCreateHttp (requestUri);
}
-#endif
public virtual Stream EndGetRequestStream (IAsyncResult asyncResult)
{
throw GetMustImplement ();
[MonoTODO("Look in other places for proxy config info")]
public static IWebProxy GetSystemWebProxy ()
{
+#if MONOTOUCH
+ return CFNetwork.GetDefaultProxy ();
+#else
+#if MONODROID
+ // Return the system web proxy. This only works for ICS+.
+ var androidProxy = AndroidPlatform.GetDefaultProxy ();
+ if (androidProxy != null)
+ return androidProxy;
+#endif
#if !NET_2_1
if (IsWindows ()) {
int iProxyEnable = (int)Microsoft.Win32.Registry.GetValue ("HKEY_CURRENT_USER\\Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings", "ProxyEnable", 0);
#endif
return new WebProxy ();
+#endif // MONOTOUCH
}
void ISerializable.GetObjectData (SerializationInfo serializationInfo, StreamingContext streamingContext)
prefixes [prefix] = o;
}
-#if NET_4_5
public virtual Task<Stream> GetRequestStreamAsync ()
{
return Task<Stream>.Factory.FromAsync (BeginGetRequestStream, EndGetRequestStream, null);
{
return Task<WebResponse>.Factory.FromAsync (BeginGetResponse, EndGetResponse, null);
}
-#endif
}
}