AngleSharp by AngleSharp

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

 VirtualResponse

The virtual response class.
using AngleSharp.Extensions; using System; using System.Collections.Generic; using System.IO; using System.Net; namespace AngleSharp.Network { public class VirtualResponse : IResponse, IDisposable { private Url address; private HttpStatusCode status; private Dictionary<string, string> headers; private Stream content; private bool dispose; Url IResponse.Address { get { return address; } } Stream IResponse.Content { get { return content; } } IDictionary<string, string> IResponse.Headers { get { return headers; } } HttpStatusCode IResponse.StatusCode { get { return status; } } private VirtualResponse() { address = Url.Create("http://localhost/"); status = HttpStatusCode.OK; headers = new Dictionary<string, string>(); content = Stream.Null; dispose = false; } public static IResponse Create(Action<VirtualResponse> request) { VirtualResponse virtualResponse = new VirtualResponse(); request(virtualResponse); return virtualResponse; } public VirtualResponse Address(Url url) { address = url; return this; } public VirtualResponse Address(string address) { return Address(Url.Create(address ?? string.Empty)); } public VirtualResponse Address(Uri url) { return Address(Url.Convert(url)); } public VirtualResponse Status(HttpStatusCode code) { status = code; return this; } public VirtualResponse Status(int code) { return Status((HttpStatusCode)code); } public VirtualResponse Header(string name, string value) { headers[name] = value; return this; } public VirtualResponse Headers(object obj) { Dictionary<string, string> dictionary = obj.ToDictionary(); return Headers(dictionary); } public VirtualResponse Headers(IDictionary<string, string> headers) { foreach (KeyValuePair<string, string> header in headers) { Header(header.Key, header.Value); } return this; } public VirtualResponse Content(string text) { Release(); byte[] bytes = TextEncoding.Utf8.GetBytes(text); content = new MemoryStream(bytes); dispose = true; return this; } public VirtualResponse Content(Stream stream, bool shouldDispose = false) { Release(); content = stream; dispose = shouldDispose; return this; } private void Release() { if (content != null && dispose) content.Dispose(); dispose = false; content = null; } void IDisposable.Dispose() { Release(); } } }