AngleSharp by AngleSharp

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

 MultipartFormDataSetVisitor

using AngleSharp.Dom.Io; using AngleSharp.Extensions; using System; using System.Collections.Generic; using System.IO; using System.Text; namespace AngleSharp.Html.Submitters { internal sealed class MultipartFormDataSetVisitor : IFormSubmitter, IFormDataSetVisitor { private static readonly string DashDash = "--"; private readonly Encoding _encoding; private readonly List<Action<StreamWriter>> _writers; private readonly string _boundary; public MultipartFormDataSetVisitor(Encoding encoding, string boundary) { _encoding = encoding; _writers = new List<Action<StreamWriter>>(); _boundary = boundary; } public void Text(FormDataSetEntry entry, string value) { if (entry.HasName && value != null) _writers.Add(delegate(StreamWriter stream) { stream.WriteLine("Content-Disposition: form-data; name=\"{0}\"", new object[1] { entry.Name.HtmlEncode(_encoding) }); stream.WriteLine(); stream.WriteLine(value.HtmlEncode(_encoding)); }); } public void File(FormDataSetEntry entry, string fileName, string contentType, IFile content) { if (entry.HasName) _writers.Add(delegate(StreamWriter stream) { bool flag = content != null && content?.Name != null && content.Type != null && content.Body != null; stream.WriteLine("Content-Disposition: form-data; name=\"{0}\"; filename=\"{1}\"", new object[2] { entry.Name.HtmlEncode(_encoding), fileName.HtmlEncode(_encoding) }); stream.WriteLine("Content-Type: {0}", new object[1] { contentType }); stream.WriteLine(); if (flag) { stream.Flush(); content.Body.CopyTo(stream.BaseStream); } stream.WriteLine(); }); } public void Serialize(StreamWriter stream) { foreach (Action<StreamWriter> writer in _writers) { stream.Write(DashDash); stream.WriteLine(_boundary); writer(stream); } stream.Write(DashDash); stream.Write(_boundary); stream.Write(DashDash); } } }