private void OnWebResourceRequested(WebView sender, WebViewWebResourceRequestedEventArgs args) { HttpResponseMessage response = null; var str = args.Request.RequestUri.OriginalString; if (str.StartsWith(FakeHttpPrefix)) { var requestString = str.Replace(FakeHttpPrefix, ""); // e.g. =@public@vhost@g@gutenberg@html@files@61533@61533-h@[email protected] if (true || requestString.Contains("@images")) { var requestedFile = EpubWizard.GetInternalFileByName(EpubBook, requestString); if (requestedFile != null) { if (requestString.EndsWith(".css")) { var changed = CssFixup.FixupCss(requestedFile); if (changed) { ; } } if (Logger.LogAllResourceLoads) { Logger.Log($"MainEpubReader:OnWebResourceRequested: FOUND internal asset request {requestString}"); } response = new HttpResponseMessage(HttpStatusCode.Ok) { Content = new HttpBufferContent(requestedFile.Content.AsBuffer()), }; //response.Content.Headers.ContentType } else { Logger.Log($"MainEpubReader:OnWebResourceRequested: Can't find request {requestString}"); } } } else { // Is a link in the book. Just jump to it via external browser. App.Error($"Weird: HTTP is requesting {str}"); Logger.Log($"MainEpubReader:WebResourceRequested: External URL URL={str}"); } if (response == null) { response = new HttpResponseMessage(HttpStatusCode.NotFound) { ReasonPhrase = "Cant find embedded resource", }; } args.Response = response; }
internal async void WebResourceRequested(WebView sender, WebViewWebResourceRequestedEventArgs args) { var request = args.Request; string localPath = request.RequestUri.LocalPath; if (localPath.StartsWith("/kcs2/index.php")) { referer = request.RequestUri; } else if (localPath.StartsWith("/kcsapi/")) { var deferral = args.GetDeferral(); try { string reqStr = null; if (request.Content != null) { using var stream = new InMemoryRandomAccessStream(); await request.Content.WriteToStreamAsync(stream); stream.Seek(0); reqStr = new StreamReader(stream.AsStream()).ReadToEnd(); request.Content = new HttpStringContent(reqStr, UnicodeEncoding.Utf8, "application/x-www-form-urlencoded"); } request.Headers.Referer = referer; using (request.Content) using (var response = await client.SendRequestAsync(request)) { args.Response = response; deferral.Complete(); Received?.Invoke(response.Headers.Date ?? DateTimeOffset.Now, new HttpMessage ( localPath.Substring(8), reqStr.AsMemory(), (await response.Content.ReadAsStringAsync()).AsMemory(7) )); } } catch { args.Response = new HttpResponseMessage(HttpStatusCode.BadGateway); deferral.Complete(); } } }
private void MyWebView_WebResourceRequested(WebView sender, WebViewWebResourceRequestedEventArgs args) { if (args.Request.Method.Method == "POST") { HttpStreamContent content = (HttpStreamContent)args.Request.Content; var contentBuffer = content.ReadAsBufferAsync().GetResults(); byte[] buffer = contentBuffer.ToArray(); //var readStream = inputStream.AsStreamForRead(); //MemoryStream ms = new MemoryStream(); //byte[] b = null; //using (MemoryStream mss = new MemoryStream()) //{ // int count = 0; // do // { // try // { // byte[] buf = new byte[1024]; // count = readStream.Read(buf, 0, 1024); // mss.Write(buf, 0, count); // } // catch (Exception) // { // } // } while (readStream.CanRead && count > 0); //} } }
private void WebView_WebResourceRequested(object sender, WebViewWebResourceRequestedEventArgs e) { var reqesutUri = e.Request.RequestUri; using (var defferral = e.GetDeferral()) { try { var stream = PageViewModel.ResolveWebResourceRequest(reqesutUri); if (stream != null) { e.Response = new Windows.Web.Http.HttpResponseMessage(statusCode: Windows.Web.Http.HttpStatusCode.Ok); e.Response.Content = new HttpStreamContent(stream.AsInputStream()); } } finally { defferral.Complete(); } } }
Deferral IWebViewWebResourceRequestedEventArgsResolver.GetDeferral(WebViewWebResourceRequestedEventArgs e) => e.GetDeferral();
void IWebViewWebResourceRequestedEventArgsResolver.Response(WebViewWebResourceRequestedEventArgs e, HttpResponseMessage response) => e.Response = response;
HttpRequestMessage IWebViewWebResourceRequestedEventArgsResolver.Request(WebViewWebResourceRequestedEventArgs e) => e.Request;
/// <summary> /// Gets a deferral object for managing the work done in the WebResourceRequested event handler. /// </summary> /// <param name="e">The requested <see cref="WebViewWebResourceRequestedEventArgs"/>.</param> /// <returns>A deferral object.</returns> public static Deferral GetDeferralWrapped(this WebViewWebResourceRequestedEventArgs e) => Resolver.GetDeferral(e);
/// <summary> /// Sets the response to the web resource request. /// </summary> /// <param name="e">The requested <see cref="WebViewWebResourceRequestedEventArgs"/>.</param> /// <param name="response">The response to the web resource request.</param> public static void Response(this WebViewWebResourceRequestedEventArgs e, HttpResponseMessage response) => Resolver.Response(e, response);
/// <summary> /// Gets the web resource request. /// </summary> /// <param name="e">The requested <see cref="WebViewWebResourceRequestedEventArgs"/>.</param> /// <returns>The web resource request.</returns> public static HttpRequestMessage Request(this WebViewWebResourceRequestedEventArgs e) => Resolver.Request(e);