[API Proposal]: String-to-String Base64 Encode/Decode

Aperta
#136,711 3 commenti 0 reazioni 0 assegnatari Vedi su GitHub

I maintainer di solito rispondono entro 1 giorno

Nessuno ha ancora preso questa issue.

Valutazione

Difficoltà
5/5
Tempo stimato
Più di una settimana
Idoneità per principianti
35/100
Tipo di issue
Funzionalità
Chiarezza
Abbastanza chiara
Stato di attività
Attiva
Stack tecnologico
csharp
Ambito
api

Direzione di ricerca

Start by reviewing the proposed APIs for System.Convert, System.Buffers.Text.Base64, and Base64Url, along with the existing Base64 APIs they extend. The issue does not name files or tests; the first step is to determine whether the proposed signatures and behavior fit the project’s API conventions. Done means the proposal has a clear design decision, including the Encoding parameters.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Descrizione

api-suggestion area-System.Runtime untriaged

Background and Motivation

Today, .NET's Base64 APIs have a gap: there is no direct way to encode a string to a Base64 string, or decode a Base64 string back to a string. Every existing method either accepts byte[] / ReadOnlySpan<byte> as input (encode side) or returns byte[] (decode side).

This pattern is extremely common across the .NET ecosystem. It appears in CI/CD tooling, configuration loaders, certificate handling, token encoding, and countless other packages. In many cases the Base64-encoded values are stored as strings in configuration files, databases, or API responses and need to be decoded back to strings when consumed later.

var certPem = Encoding.UTF8.GetString(Convert.FromBase64String(configuration.ClientCertificateData));

var releaseBuildBase64 = Convert.ToBase64String(System.Text.Encoding.UTF8.GetBytes(releaseBuild));

This is verbose, does not have easy discoverability and allocates an intermediate byte[] that could be avoided internally.

Proposed API

All methods accept ReadOnlySpan<char> rather than string — callers can pass a string directly thanks to the implicit conversion.

namespace System;

public static partial class Convert
{
    public static string ToBase64String(ReadOnlySpan<char> source, Encoding encoding);

    public static string ToBase64String(ReadOnlySpan<char> source, Encoding encoding, Base64FormattingOptions options);
}

namespace System.Buffers.Text;

public static partial class Base64
{
    public static string EncodeToString(ReadOnlySpan<char> source, Encoding encoding);

    public static string DecodeToString(ReadOnlySpan<char> source, Encoding encoding);
}

public static partial class Base64Url
{
    public static string EncodeToString(ReadOnlySpan<char> source, Encoding encoding);

    public static string DecodeToString(ReadOnlySpan<char> source, Encoding encoding);
}

API Usage

// Encode a connection string for safe storage in a config file
string encoded = Convert.ToBase64String("Server=prod;Database=App;User=admin;", Encoding.UTF8);

// Decode it back when reading the config
string connectionString = Convert.FromBase64ToString(encoded, Encoding.UTF8);

Edit: Added Encoding parameters

Lingua principale
C#
Stelle
18.4k
Fork
5.8k
Merge medio
2g 13h
PR unite (30g)
588

Preparare l'ambiente

Apri in Codespaces

Avvia il container di sviluppo del progetto nel browser, con il tuo account GitHub.

Come iniziare

  1. Leggi tutta la issue e poi la guida ai contributi del progetto.
  2. Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
  3. Fai un fork del repository e lavora su un branch.
  4. Apri una pull request che faccia riferimento al numero della issue.

Altre issue di dotnet/runtime

Tutte le issue di dotnet/runtime

Issue simili

Altre issue su C#

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.