protected override async Task <HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
        {
            string[]            urls             = Mint.SharedInstance.BlacklistUrls();
            string              url              = request.RequestUri.ToString();
            bool                urlIsBlacklisted = urls.FirstOrDefault(p => url.Contains(p)) != null;
            HttpResponseMessage responseMessage  = null;

            if (!urlIsBlacklisted)
            {
                NetworkDataFixture networkData = new NetworkDataFixture();
                networkData.Url      = url;
                networkData.Protocol = request.RequestUri.Scheme;
                byte[] contentBytes = await request.Content.ReadAsByteArrayAsync();

                networkData.RequestLength = NSNumber.FromInt32(contentBytes.Length);
                networkData.AppendStartTime();

                string exceptionCaughtMessage = null;


                try {
                    responseMessage = await base.SendAsync(request, cancellationToken);
                } catch (Exception ex) {
                    exceptionCaughtMessage = ex.Message;
                }

                networkData.AppendEndTime();
                int      statusCode       = (int)responseMessage.StatusCode;
                NSNumber statusCodeNumber = NSNumber.FromInt32(statusCode);
                networkData.StatusCode = statusCodeNumber;
                networkData.AppendWithStatusCode(statusCodeNumber);
                byte[] receivedBytes = await responseMessage.Content.ReadAsByteArrayAsync();

                networkData.ResponseLength = NSNumber.FromInt32(receivedBytes.Length);
                if (exceptionCaughtMessage != null)
                {
                    networkData.Exception = exceptionCaughtMessage;
                }
                networkData.SaveToDisk();
            }
            else
            {
                responseMessage = await base.SendAsync(request, cancellationToken);
            }
            return(responseMessage);
        }
        public override void ViewDidLoad()
        {
            base.ViewDidLoad();

            // Perform any additional setup after loading the view, typically from a nib.

            if (session == null)
            {
                session = InitBackgroundSession();
            }

            LogHandledException1Button.TouchUpInside += LogHandledException1Button_TouchUpInside;
            LogHandledException2Button.TouchUpInside += LogHandledException2Button_TouchUpInside;
            WebRequestButton.TouchUpInside           += WebRequestRestPostButton_TouchUpInside;
            HTTPClientButton.TouchUpInside           += HttpClientRestPostButton_TouchUpInside;
            LogEventWithTagButton.TouchUpInside      += LogLevelEventButton_TouchUpInside;
            ModernHttpClientButton.TouchUpInside     += ModernHttpClientButton_TouchUpInside;
            StartSessionButton.TouchUpInside         += StartSessionButton_TouchUpInside;
            CloseSessionButton.TouchUpInside         += CloseSessionButton_TouchUpInside;
            FlushButton.TouchUpInside            += FlushButton_TouchUpInside;
            StartTransactionButton.TouchUpInside += StartTransactionButton_TouchUpInside;
            StopTransactionButton.TouchUpInside  += StopTransactionButton_TouchUpInside;
            NSUrlSessionButton.TouchUpInside     += NSUrlSessionButton_TouchUpInside;
            NSUrlConnectionButton.TouchUpInside  += NSUrlConnectionButton_TouchUpInside;
            UnobservedTaskButton.TouchUpInside   += TaskUnawaitedMethod;

            Mint.SharedInstance.HandleUnobservedException = (Exception arg) => {
                return(true);
            };

            Mint.SharedInstance.CachedRequestsSent += (sender, args) =>
            {
                LoggedRequestEventArgs loggedRequestEventArgs = (LoggedRequestEventArgs)sender;
                Debug.WriteLine("Logged Request Handled {0} with JSON:\r\n{1}",
                                loggedRequestEventArgs.ResponseResult.ResultState == MintResultState.OKResultState
                                        ? "Successfully" : "with Failure and",
                                loggedRequestEventArgs.ResponseResult.ClientRequest);
                ShowAlert("CachedRequestsSent");
            };

            Mint.SharedInstance.NetworkDataIntercepted += (sender, args) =>
            {
                NetworkDataFixture networkDataFixture = (NetworkDataFixture)sender;
                Debug.WriteLine("Network Data Logged: {0}", networkDataFixture.ToJSONString);
                ShowAlert("NetworkDataIntercepted");
            };

            Mint.SharedInstance.AddExtraData(new ExtraData("GlobalKey1", "GlobalValue1"));

            LimitedExtraDataList extraDataList = new LimitedExtraDataList();

            extraDataList.AddWithKey("ListGlobalKey1", "ListGlobalValue1");

            Mint.SharedInstance.AddExtraDataList(extraDataList);

            Mint.SharedInstance.ClearExtraData();

            LimitedExtraDataList globalExtraDataList = Mint.SharedInstance.ExtraDataList;

            Mint.SharedInstance.ExtraDataList.AddWithKey("GlobalKey1", "GlobalValue1");

            Mint.SharedInstance.ExtraDataList.Add(new ExtraData("GlobalExtraKey1", "GlobalExtraValue1"));

            Mint.SharedInstance.RemoveExtraDataWithKey("GlobalKey1");

            Mint.SharedInstance.ClearBreadcrumbs();

            Mint.SharedInstance.LeaveBreadcrumb("SplunkMint-iOS.ClientAppViewController:ViewDidLoad");

            Mint.SharedInstance.UserIdentifier = "*****@*****.**";

            Mint.SharedInstance.AddURLToBlacklist("splunk");
        }
		protected override async Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
		{
			string[] urls = Mint.SharedInstance.BlacklistUrls ();
			string url = request.RequestUri.ToString ();
			bool urlIsBlacklisted = urls.FirstOrDefault (p => url.Contains (p)) != null;
			HttpResponseMessage responseMessage = null;

			if (!urlIsBlacklisted) {
				NetworkDataFixture networkData = new NetworkDataFixture ();
				networkData.Url = url;
				networkData.Protocol = request.RequestUri.Scheme;
				byte[] contentBytes = await request.Content.ReadAsByteArrayAsync ();
				networkData.RequestLength = NSNumber.FromInt32 (contentBytes.Length);
				networkData.AppendStartTime ();

				string exceptionCaughtMessage = null;


				try {
					responseMessage = await base.SendAsync (request, cancellationToken);
				} catch (Exception ex) {
					exceptionCaughtMessage = ex.Message;
				}

				networkData.AppendEndTime (); 
				int statusCode = (int)responseMessage.StatusCode;
				NSNumber statusCodeNumber = NSNumber.FromInt32 (statusCode);
				networkData.StatusCode = statusCodeNumber;
				networkData.AppendWithStatusCode (statusCodeNumber);
				byte[] receivedBytes = await responseMessage.Content.ReadAsByteArrayAsync ();
				networkData.ResponseLength = NSNumber.FromInt32 (receivedBytes.Length);
				if (exceptionCaughtMessage != null)
					networkData.Exception = exceptionCaughtMessage;
				networkData.SaveToDisk ();
			} else {
				responseMessage = await base.SendAsync (request, cancellationToken);
			}
			return responseMessage;
		}