AngleSharp by AngleSharp

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

 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; private TResource _resource; public string Source { get { if (_resource == null) return string.Empty; return _resource.Source.Href; } } public bool IsReady => _resource != null; public TResource Resource { get { return _resource; } protected set { _resource = value; } } 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) { if (_resource != null) return !target.Equals(_resource.Source); return true; } } }