private void FinishUriSchemeCallback(IntPtr request, IntPtr stream, long streamLength, Uri uri) { using (GLibString mimetype = MimeTypes.FindForUri(uri)) { WebKit.UriScheme.FinishSchemeRequest(request, stream, streamLength, mimetype); } }
private static void FinishUriSchemeCallback(IntPtr url, IntPtr schemeTask, IntPtr data, long contentLength, Uri uri) { IntPtr response = Foundation.Call("NSURLResponse", "alloc"); ObjC.Call( response, "initWithURL:MIMEType:expectedContentLength:textEncodingName:", url, NSString.Create(MimeTypes.FindForUri(uri)), new IntPtr(contentLength), IntPtr.Zero); ObjC.Call(schemeTask, "didReceiveResponse:", response); IntPtr nsData = Foundation.Call( "NSData", "dataWithBytesNoCopy:length:freeWhenDone:", data, new IntPtr(contentLength), IntPtr.Zero); ObjC.Call(schemeTask, "didReceiveData:", nsData); ObjC.Call(schemeTask, "didFinish"); }
private async void Webview_WebResourceRequested(object?sender, CoreWebView2WebResourceRequestedEventArgs e) { using var deferral = e.GetDeferral(); var uri = new Uri(e.Request.Uri); var contentStream = await Application.ContentProvider.GetStreamAsync(uri); if (contentStream == null) { e.Response = webview.CoreWebView2.Environment.CreateWebResourceResponse(null, 404, "Not Found", string.Empty); } else { e.Response = webview.CoreWebView2.Environment.CreateWebResourceResponse(contentStream, 200, "OK", string.Empty); e.Response.Headers.AppendHeader("Content-Type", MimeTypes.FindForUri(uri)); } }
private async void ListenerCallback(IAsyncResult result) { var listener = result.AsyncState as HttpListener; HttpListenerContext context = null; try { listener.BeginGetContext(ListenerCallback, listener); context = listener.EndGetContext(result); } catch { return; } try { if (context.Request.HttpMethod.ToUpper() == "GET") { using (var stream = await contentProvider.GetStreamAsync(context.Request.Url)) { if (stream != null) { context.Response.ContentType = MimeTypes.FindForUri(context.Request.Url); using (var responseStream = context.Response.OutputStream) { await stream.CopyToAsync(responseStream); } } else { context.Response.StatusCode = 404; } } } else { context.Response.StatusCode = 400; } } catch { context.Response.StatusCode = 500; } finally { context.Response.Close(); } }
/// <inheritdoc/> public string GetMimeType(Uri uri) => MimeTypes.FindForUri(uri);