AngleSharp by AngleSharp

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

 UrlEncodedFormDataSetVisitor

using AngleSharp.Dom; using AngleSharp.Io.Dom; using AngleSharp.Text; using System.Collections.Generic; using System.IO; using System.Runtime.CompilerServices; using System.Text; namespace AngleSharp.Html.Forms.Submitters { [System.Runtime.CompilerServices.NullableContext(1)] [System.Runtime.CompilerServices.Nullable(0)] 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()); } } }