Exception deriving from WebClient on Windows Phone 7.5

Corrado Cavalli
Corrado Cavalli
Published in
1 min readJul 12, 2013

I was working on a Windows Phone 7.5 app that requires to use WebClient class to post a HEAD request to the server, since WebClient doesn’t support it, i used the trick to derive from WebClient and override the GetWebRequest method.

public class WebClientEx : WebClient
{
public WebClientEx()
{
}

public string Method
{
get;
set;
}
protected override WebRequest GetWebRequest(Uri address)
{
WebRequest webRequest = base.GetWebRequest(address);
if (!string.IsNullOrEmpty(Method))
webRequest.Method = Method;
return webRequest;
}
}
i then used the new class this way:
WebClientEx client = new WebClientEx() { Method = "HEAD" };
client.DownloadStringCompleted += (s, e) => ...
client.DownloadStringAsync(new Uri(uri, UriKind.Absolute));
Nothing new indeed, so what is the reason of this post? the fact that everything was fine in Windows Phone 8 but it was failing with a “inheritance security rules violated by type WebClientEx. Derived types must either match the security accessibility of the base type or be less accessible. If the base class has a non-transparent default constructor, the derived class must also have a default constructor, and the method inheritance rules apply across those two methods.” when run on a Windows Phone 7.5 device.A quick search and it looks like that the reason comes from a missing attribute applied to derived class constructor.Adding a default constructor marked with SecuritySafeCritical attribute solved it (Phew!)[System.Security.SecuritySafeCritical]
public WebClientEx()
{
}

--

--

Corrado Cavalli
Corrado Cavalli

Senior Sofware Engineer at Microsoft, former Xamarin/Microsoft MVP mad about technology. MTB & Ski mountaineering addicted.