AngleSharp by AngleSharp

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

 ResourceRequestProcessor<TResource>

abstract class ResourceRequestProcessor<TResource> : BaseRequestProcessor where TResource : IResourceInfo
using AngleSharp.Extensions; using AngleSharp.Services; using AngleSharp.Services.Media; using System.Threading.Tasks; namespace AngleSharp.Network.RequestProcessors { internal abstract class ResourceRequestProcessor<TResource> : BaseRequestProcessor where TResource : IResourceInfo { private readonly IConfiguration _options; public string Source { get { TResource resource = Resource; ref TResource reference = ref resource; TResource val = default(TResource); object obj; if (val == null) { val = reference; ref reference = ref val; if (val == null) { obj = null; goto IL_003d; } } obj = reference.Source.Href; goto IL_003d; IL_003d: if (obj == null) obj = string.Empty; return (string)obj; } } public bool IsReady => Resource != null; public TResource Resource { get; set; } public ResourceRequestProcessor(IConfiguration options, IResourceLoader loader) : base(loader) { _options = options; } public override Task ProcessAsync(ResourceRequest request) { if (IsDifferentToCurrentResourceUrl(request.Target)) return base.ProcessAsync(request); return null; } protected IResourceService<TResource> GetService(IResponse response) { MimeType contentType = response.GetContentType(); return AngleSharp.Extensions.ConfigurationExtensions.GetResourceService<TResource>(_options, contentType.Content); } private bool IsDifferentToCurrentResourceUrl(Url target) { TResource resource = Resource; if (resource != null) return !target.Equals(resource.Source); return true; } } }