public override WebResourceResponse ShouldInterceptRequest(WebView view, string url) { var postData = GetNavigationData(url); if (postData != null) { if (postData.PostData != null) { try { var request = HttpWebRequest.Create(url); //request.ContentType = "text/plain"; //TODO: What should we set here? request.Method = "POST"; if (postData.AdditionalHeaders != null) { foreach (var additionalHeader in postData.AdditionalHeaders) { request.Headers.Add(additionalHeader.Key, additionalHeader.Value); } } using (var reqestStream = request.GetRequestStream()) { reqestStream.Write(postData.PostData, 0, postData.PostData.Length); reqestStream.Flush(); } //using ( //TODO: Don't we need using directive here? var response = request.GetResponse() as HttpWebResponse; //) { if (response.StatusCode != HttpStatusCode.OK) { //TODO: do we need to rise NavigationFailed event here? } var res = new WebResourceResponse(response.ContentType, response.ContentEncoding, response.GetResponseStream()); return res; } } catch (InvalidOperationException ioex) { var e = new NavigationFailedEventArgs( new Uri(url), ioex // Do we need to set this exception? WP8 WebView always set it to null ); _Parent.OnNavigationFailed(e); if (e.Handled) { return GetCancelWebResourceResponse(); } } } } return null; //base.ShouldInterceptRequest(view, url); }
private void OnNavigationFailed(NavigationFailedEventArgs e) { if (this.NavigationFailed != null) { this.NavigationFailed(this, e); } }
public override void OnReceivedError(WebView view, ClientError errorCode, string description, string failingUrl) { base.OnReceivedError(view, errorCode, description, failingUrl); var e = new NavigationFailedEventArgs( new Uri(failingUrl), new InvalidOperationException(description) // Do we need to set this exception? WP8 WebView always set it to null ); _Parent.OnNavigationFailed(e); if (e.Handled) { //TODO: Don't render error page } }