AyCode.Core/AyCode.Services/Mvc
Loretta 58f7a1c286 [LOADED_DOCS: 3 files, no new loads]
Add docs for AcBinary MVC formatters and pipeline updates

Comprehensive documentation for new ASP.NET Core MVC formatters supporting AcBinary, including registration, media type, request/response flow, error handling, and future plans. Updated project and topic docs to reference MVC formatters and folder structure. Added performance planning entry for StreamPipeWriter congestion fallback. Expanded markerless schema lane rationale and updated architecture docs to reflect MVC formatter integration. Improved navigation and layering documentation.
2026-05-05 06:55:32 +02:00
..
AcBinaryInputFormatter.cs [LOADED_DOCS: 2 files, no new loads] 2026-05-04 14:42:17 +02:00
AcBinaryMvcBuilderExtensions.cs [LOADED_DOCS: 2 files, no new loads] 2026-05-04 13:20:33 +02:00
AcBinaryOutputFormatter.cs [LOADED_DOCS: 2 files, no new loads] 2026-05-04 13:20:33 +02:00
README.md [LOADED_DOCS: 3 files, no new loads] 2026-05-05 06:55:32 +02:00

README.md

Mvc

ASP.NET Core MVC formatters for AcBinary wire format. Standard MVC pipeline integration — works with both controller-based MVC and Minimal API.

Topic docs: AyCode.Services/docs/MVC/README.md — media type, request/response flow, configuration, ProblemDetails error model. Binary serializer: ../../AyCode.Core/AyCode.Core/docs/BINARY/README.md

Key Files

  • AcBinaryInputFormatter.cs — Reads request body via PipeReader.Create(Request.Body), drains chunks into AsyncPipeReaderInput on the calling thread while a background Task.Run deserializes incrementally via AcBinaryDeserializer.Deserialize(input, ModelType, opts). ProblemDetails error flow on failure (ModelState.TryAddModelError → 400 + application/problem+json). Cancellation honors HttpContext.RequestAborted.
  • AcBinaryOutputFormatter.cs — Wraps Response.Body as PipeWriter, calls AcBinarySerializer.SerializeChunked(Object, ObjectType, writer, opts) (raw mode — pure AcBinary bytes, no per-chunk framing). pipeWriter.CompleteAsync() in finally.
  • AcBinaryMvcBuilderExtensions.csIMvcBuilder.AddAcBinaryFormatters(...) + IMvcCoreBuilder.AddAcBinaryFormatters(...). Inserts both formatters at index 0 of MvcOptions.InputFormatters / OutputFormatters so AcBinary is preferred when the client's Accept header allows.

Media Type

application/vnd.acbinary (vendor tree). Configurable per-instance via SupportedMediaTypes.Add(...) if a different type is needed.

Layering

The formatter owns the transport-specific drain-loop (PipeReader.ReadAsyncinput.Feed). The serializer surface ends at AsyncPipeReaderInputAcBinaryDeserializer itself does not know about PipeReader. This mirrors the SignalR pattern (AcBinaryHubProtocol.TryParseChunkData does the same state.Buffer.Write(span)-loop).