brainstorming
brainstorming
You MUST use this before any creative work - creating features, building components, adding functionality, modifying behavior, or planning anything new, in software or out of it (a talk, a business, a renovation).
managedcode-mimetypesUse ManagedCode.MimeTypes when a .NET application needs consistent MIME type detection, extension mapping, and content-type decisions for uploads, downloads, or HTTP responses. USE FOR: integrating ManagedCode.MimeTypes into upload or download flows; mapping file extensions to content types in APIs or background processing; reviewing content-type. DO NOT US…
Independent GitHub snapshot · Automated classification · Original documentation governs
ManagedCode.MimeTypes into upload or download flowsdotnet add package ManagedCode.MimeTypes --version 10.1.1
Use PackageReference when the repository centralizes dependency versions:
<PackageReference Include="ManagedCode.MimeTypes" Version="10.1.1" />
The current package targets .NET 8, 9, and 10. Keep the version in the repository's existing central package-management file when one is present.
Map file names, URLs, and compound extensions through the generated catalog:
using ManagedCode.MimeTypes;
var reportType = MimeHelper.GetMimeType("report.pdf");
var archiveType = MimeHelper.GetMimeType("archive.tar.gz");
var imageType = MimeHelper.GetMimeType("https://cdn.example.test/avatar.png?v=2");
var jpegExtensions = MimeHelper.GetExtensions("image/jpeg");
Use registry metadata when the application needs provenance or registration details:
if (MimeHelper.TryGetMimeTypeInfoByExtension("report.pdf", out var info))
{
Console.WriteLine(quot;{info.Mime} registered={info.IsIanaRegistered}");
}
Register product-specific mappings at startup and remove them only when the owning application lifecycle requires it:
MimeHelper.RegisterMimeType("acme", "application/x-acme");
var customType = MimeHelper.GetMimeType("invoice.acme");
MimeHelper.UnregisterMimeType("acme");
Runtime registrations affect extension and reverse lookup, but do not synthesize full IANA registry metadata.
Treat the extension and declared content type as claims. Inspect the signature before accepting security-sensitive uploads:
using var stream = upload.OpenReadStream();
if (!MimeHelper.MatchesMimeTypeByContent(stream, upload.ContentType) ||
!MimeHelper.MatchesExtensionByContent(upload.FileName, stream))
{
throw new InvalidOperationException("Upload content does not match its declared type.");
}
GetMimeTypeByContent and the Matches*ByContent helpers inspect known prefixes and restore the position of seekable streams. They are not full document parsers, malware scanners, or proof that the remainder of a file is valid.
MimeHelper.DefaultMimeType, initially application/octet-stream; use SetDefaultMimeType only when the whole application owns a different fallback contract.MimeHelper.Instance through IMimeHelper when dependency injection and test substitution are useful; use static calls for small, deterministic mapping boundaries.10.1.1, catalog JSON is processed by the source generator at build time; generated MIME constants do not initialize the registry. The first lookup initializes frozen/immutable indexes, and reverse lookups reuse cached collections. Use MimeHelper.WarmUp() at application startup when predictable first-request latency matters; measure cold initialization separately from steady-state lookups.flowchart LR
A["File name or extension"] --> B["ManagedCode.MimeTypes lookup"]
B --> C["Resolved MIME type"]
C --> D["Upload validation, storage metadata, or HTTP response"]
dotnet restore resolves ManagedCode.MimeTypes 10.1.1 or the repository-approved newer versiondotnet test passes for the projects that own upload, download, or storage behavior