AngleSharp by Florian Rappl

<PackageReference Include="AngleSharp" Version="0.6.0" />

 ConfigurationExtensions

Represents a helper to construct objects with externally defined classes and libraries.
using AngleSharp.DOM; using AngleSharp.Infrastructure; using AngleSharp.Network; using System; using System.IO; using System.Text; using System.Threading; using System.Threading.Tasks; namespace AngleSharp { internal static class ConfigurationExtensions { public static Encoding DefaultEncoding(this IConfiguration configuration) { if (configuration == null) configuration = Configuration.Default; return DocumentEncoding.Suggest(configuration.Language); } public static Task<Stream> LoadAsync(this IConfiguration configuration, Uri url) { return configuration.LoadAsync(url, CancellationToken.None, false); } public static Task<Stream> LoadAsync(this IConfiguration configuration, string url) { return configuration.LoadAsync(url, CancellationToken.None, false); } public static Task<Stream> LoadAsync(this IConfiguration configuration, string url, CancellationToken cancel, bool force = false) { if (!Uri.TryCreate(url, UriKind.Absolute, out Uri result)) throw new ArgumentException("The given URL does not represent a valid absolute URL."); return configuration.LoadAsync(result, cancel, force); } public static async Task<Stream> LoadAsync(this IConfiguration configuration, Uri url, CancellationToken cancel, bool force = false) { if (!configuration.AllowRequests && !force) return Stream.Null; IRequester requester = configuration.GetRequester(); if (requester == null) throw new NullReferenceException("No HTTP requester has been set up in the configuration."); IRequest request = configuration.CreateRequest(); if (request == null) throw new NullReferenceException("Unable to create instance of IRequest. Try changing the provided configuration."); request.Address = url; request.Method = HttpMethod.Get; return (await requester.RequestAsync(request, cancel)).Content; } public static Task<Stream> SendAsync(this IConfiguration configuration, Uri url, Stream content = null, string mimeType = null, HttpMethod method = HttpMethod.Post) { return configuration.SendAsync(url, content, mimeType, method, CancellationToken.None, false); } public static async Task<Stream> SendAsync(this IConfiguration configuration, Uri url, Stream content, string mimeType, HttpMethod method, CancellationToken cancel, bool force = false) { if (!configuration.AllowRequests && !force) return Stream.Null; IRequester requester = configuration.GetRequester(); if (requester == null) throw new NullReferenceException("No HTTP requester has been set up in the configuration."); IRequest request = configuration.CreateRequest(); if (request == null) throw new NullReferenceException("Unable to create instance of IRequest. Try changing the provided configuration."); request.Address = url; request.Content = content; if (mimeType != null) request.Headers[HeaderNames.ContentType] = mimeType; request.Method = method; return (await requester.RequestAsync(request, cancel)).Content; } public static IStyleEngine GetStyleEngine(this IConfiguration configuration, string type) { foreach (IStyleEngine styleEngine in configuration.StyleEngines) { if (styleEngine.Type.Equals(type, StringComparison.OrdinalIgnoreCase)) return styleEngine; } return null; } public static IStyleSheet ParseStyling(this IConfiguration configuration, string source, IElement owner = null, string type = null) { if (configuration.IsStyling) { IStyleEngine styleEngine = configuration.GetStyleEngine(type ?? MimeTypes.Css); if (styleEngine != null) return styleEngine.CreateStyleSheetFor(source, owner); } return null; } public static IStyleSheet ParseStyling(this IConfiguration configuration, Stream source, IElement owner = null, string type = null) { if (configuration.IsStyling) { IStyleEngine styleEngine = configuration.GetStyleEngine(type ?? MimeTypes.Css); if (styleEngine != null) return styleEngine.CreateStyleSheetFor(source, owner); } return null; } public static IScriptEngine GetScriptEngine(this IConfiguration configuration, string type) { foreach (IScriptEngine scriptEngine in configuration.ScriptEngines) { if (scriptEngine.Type.Equals(type, StringComparison.OrdinalIgnoreCase)) return scriptEngine; } return null; } public static void RunScript(this IConfiguration configuration, string source, ScriptOptions options, string type = null) { if (configuration.IsScripting) configuration.GetScriptEngine(type ?? MimeTypes.DefaultJavaScript)?.Evaluate(source, options); } public static void RunScript(this IConfiguration configuration, Stream source, ScriptOptions options, string type = null) { if (configuration.IsScripting) configuration.GetScriptEngine(type ?? MimeTypes.DefaultJavaScript)?.Evaluate(source, options); } } }