AngleSharp by AngleSharp

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

 UrlEncodedFormDataSetVisitor

using AngleSharp.Dom.Io; using AngleSharp.Extensions; using System.Collections.Generic; using System.IO; using System.Text; namespace AngleSharp.Html.Submitters { internal sealed class UrlEncodedFormDataSetVisitor : IFormSubmitter, IFormDataSetVisitor { private readonly Encoding _encoding; private readonly List<string> _lines; private bool _first; private string _index; public UrlEncodedFormDataSetVisitor(Encoding encoding) { _encoding = encoding; _lines = new List<string>(); _first = true; _index = string.Empty; } public void Text(FormDataSetEntry entry, string value) { if (_first && entry.HasName && entry.Name.Is(TagNames.IsIndex) && entry.Type.Isi(InputTypeNames.Text)) _index = (value ?? string.Empty); else if (entry.HasName && value != null) { byte[] bytes = _encoding.GetBytes(entry.Name); byte[] bytes2 = _encoding.GetBytes(value); Add(bytes, bytes2); } _first = false; } public void File(FormDataSetEntry entry, string fileName, string contentType, IFile content) { if (entry.HasName && content != null && content.Name != null) { byte[] bytes = _encoding.GetBytes(entry.Name); byte[] bytes2 = _encoding.GetBytes(content.Name); Add(bytes, bytes2); } _first = false; } public void Serialize(StreamWriter stream) { string value = string.Join("&", _lines); stream.Write(_index); stream.Write(value); } private void Add(byte[] name, byte[] value) { _lines.Add(name.UrlEncode() + "=" + value.UrlEncode()); } } }