private async void CheckUriIdentity_Click(object sender, RoutedEventArgs e) { Uri resourceUri; string resourceIdentity; ThreadNetworkContext context = null; try { if (!Uri.TryCreate(EnterpriseUri.Text.Trim(), UriKind.Absolute, out resourceUri)) { rootPage.NotifyUser("Invalid URI, please re-enter a valid URI", NotifyType.ErrorMessage); return; } resourceIdentity = await ProtectionPolicyManager.GetPrimaryManagedIdentityForNetworkEndpointAsync( new HostName(resourceUri.Host)); // if resourceIdentity is empty or Null, then it is considered personal if (!string.IsNullOrEmpty(resourceIdentity)) { context = ProtectionPolicyManager.CreateCurrentThreadNetworkContext(resourceIdentity); } // Access enterprise content rootPage.NotifyUser("Accessing Enterprise content.........", NotifyType.StatusMessage); HttpClientHandler httpHandler = new HttpClientHandler(); if (!string.IsNullOrEmpty(UserNameBox.Text) && !string.IsNullOrEmpty(DomainBox.Text) && !string.IsNullOrEmpty(Passwordbox.Password)) { httpHandler.Credentials = new NetworkCredential(UserNameBox.Text, Passwordbox.Password, DomainBox.Text); } httpHandler.AllowAutoRedirect = true; using (var client = new HttpClient(httpHandler)) { var message = new HttpRequestMessage(HttpMethod.Get, resourceUri); message.Headers.Add("User-Agent", "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1)"); var result = await client.SendAsync(message); } // Access to network resource was a success. If it wasn't, exception would have been thrown rootPage.NotifyUser("Successfully got network resource", NotifyType.StatusMessage); } catch (Exception ex) { rootPage.NotifyUser(ex.ToString(), NotifyType.ErrorMessage); } finally { if (context != null) { context.Dispose(); } } }
private async void ConnectUsingBackgroundTransfer(string resourceIdentity, Uri resourceUri) { ThreadNetworkContext context = null; try { // For demonstrational purposes, when "Use personal context" is selected, // the resourceIdentity is set to null to force personal context. // When using Windows.Networking.BackgroundTransfer, the app is responsible for disallowing connections // to enterprise owned URLs when in personal context. // Otherwise, the app may inadvertently access cached data for a different context. if (UsePersonalContext.IsChecked.Value && !string.IsNullOrEmpty(resourceIdentity)) { rootPage.NotifyUser("This app does not have access to the specified URL in personal context", NotifyType.ErrorMessage); return; } rootPage.NotifyUser("Creating file.........", NotifyType.StatusMessage); StorageFile resultFile = await ApplicationData.Current.LocalFolder.CreateFileAsync( "ResultFile.txt", CreationCollisionOption.GenerateUniqueName); if (!string.IsNullOrEmpty(resourceIdentity)) { context = ProtectionPolicyManager.CreateCurrentThreadNetworkContext(resourceIdentity); } rootPage.NotifyUser("Accessing network resource.........", NotifyType.StatusMessage); BackgroundDownloader downloader = new BackgroundDownloader(); if (!string.IsNullOrEmpty(UserNameBox.Text) && !string.IsNullOrEmpty(Passwordbox.Password)) { downloader.ServerCredential = new PasswordCredential( resourceUri.AbsoluteUri, UserNameBox.Text, Passwordbox.Password); } DownloadOperation download = downloader.CreateDownload(resourceUri, resultFile); await HandleDownloadAsync(download); } catch (Exception ex) { rootPage.NotifyUser(ex.ToString(), NotifyType.ErrorMessage); } finally { if (context != null) { context.Dispose(); } } }
static T UsingNetworkContext <T>(string identity, Func <T> lambda) { // The "using" statement will Dispose the object when control leaves the block. using (ThreadNetworkContext context = string.IsNullOrEmpty(identity) ? null : ProtectionPolicyManager.CreateCurrentThreadNetworkContext(identity)) { return(lambda()); } }
private async void CheckUriIdentity_Click(object sender, RoutedEventArgs e) { Uri resourceUri; string resourceIdentity; ThreadNetworkContext context = null; IdentityBox.Text = String.Empty; try { rootPage.NotifyUser("Creating file.........", NotifyType.StatusMessage); StorageFile resultFile = await ApplicationData.Current.LocalFolder.CreateFileAsync( "ResultFile.txt", CreationCollisionOption.GenerateUniqueName); if (!Uri.TryCreate(EnterpriseUri.Text.Trim(), UriKind.Absolute, out resourceUri)) { rootPage.NotifyUser("Invalid URI, please re-enter a valid URI", NotifyType.ErrorMessage); return; } resourceIdentity = await ProtectionPolicyManager.GetPrimaryManagedIdentityForNetworkEndpointAsync( new HostName(resourceUri.Host)); // if resourceIdentity is empty or Null, then it is considered personal IdentityBox.Text = resourceIdentity; if (!string.IsNullOrEmpty(resourceIdentity)) { context = ProtectionPolicyManager.CreateCurrentThreadNetworkContext(resourceIdentity); } // Access enterprise content rootPage.NotifyUser("Accessing network resource.........", NotifyType.StatusMessage); BackgroundDownloader downloader = new BackgroundDownloader(); if (!string.IsNullOrEmpty(UserNameBox.Text) && !string.IsNullOrEmpty(Passwordbox.Password)) { downloader.ServerCredential = new PasswordCredential( resourceUri.AbsoluteUri, UserNameBox.Text, Passwordbox.Password); } DownloadOperation download = downloader.CreateDownload(resourceUri, resultFile); await HandleDownloadAsync(download); } catch (Exception ex) { rootPage.NotifyUser(ex.ToString(), NotifyType.ErrorMessage); } finally { if (context != null) { context.Dispose(); } } }