public void ThaliWebRequestTest() { var keyPair = ThaliCryptoUtilities.GenerateThaliAcceptablePublicPrivateKeyPair(); var pkcs12Stream = ThaliCryptoUtilities.CreatePKCS12KeyStoreWithPublicPrivateKeyPair( keyPair, ThaliCryptoUtilities.DefaultPassPhrase); var cert = ThaliCryptoUtilities.GetX509Certificate(pkcs12Stream, ThaliCryptoUtilities.DefaultPassPhrase); var serverKey = ThaliClientToDeviceHubUtilities.GetServersRootPublicKey(Host, Port, cert); var serverHttpKeyUri = HttpKeyUri.BuildHttpKeyUri(serverKey, Host, Port, null, null); var thaliWebRequest = ThaliClientToDeviceHubUtilities.CreateThaliWebRequest(serverHttpKeyUri, cert); thaliWebRequest.Method = "GET"; thaliWebRequest.GetResponse().Close(); }
private static XmlHttpResponse ProxyRequest( XmlHttpRequest xmlHttpRequest, X509Certificate2 clientCert) { var httpKeyUri = HttpKeyUri.BuildHttpKeyUri(xmlHttpRequest.url); HttpWebRequest webRequest = ThaliClientToDeviceHubUtilities.CreateThaliWebRequest(httpKeyUri, clientCert); webRequest.Method = xmlHttpRequest.method; // There are multiple headers that cannot be set directly via webRequest.Headers. I only catch // two below that seem of some reasonable use. foreach (var headerNameValue in xmlHttpRequest.headers) { if (headerNameValue.Key.Equals("Accept", StringComparison.OrdinalIgnoreCase)) { webRequest.Accept = headerNameValue.Value; } else if (headerNameValue.Key.Equals("Content-Type", StringComparison.OrdinalIgnoreCase)) { webRequest.ContentType = headerNameValue.Value; } else { webRequest.Headers.Add(headerNameValue.Key, headerNameValue.Value); } } if (string.IsNullOrWhiteSpace(xmlHttpRequest.requestText)) { return ProcessResponse(xmlHttpRequest.transactionId, webRequest); } var bodyAsBytes = Encoding.UTF8.GetBytes(xmlHttpRequest.requestText); webRequest.GetRequestStream().Write(bodyAsBytes, 0, bodyAsBytes.Count()); var response = ProcessResponse(xmlHttpRequest.transactionId, webRequest); return response; }