Conceito
Strings encodadas com base64 permitem que você trabalhe com fluxos de ida e vinda de dados de uma forma segura, evitando que por exemplo caracteres reservados ao HTML (como & e ?) sejam enviados durante as requisições
Criando as funções
Adicione em uma classe de gerenciamento interna (geralmente um Helper) os métodos a seguir para ter efetivamente um controle mais direto de base64 com as operações de encode/decode e checagem.
Atenção para o fato de que você deverá referenciar as namespaces System.Text e System.Convert em sua classe.
Para codificar
        public static string EncodeBase64(string value)
        {
            var keyBytes = Encoding.UTF8.GetBytes(value);
            return Convert.ToBase64String(keyBytes);
        }
Para decodificar
        public static string DecodeBase64(string value)
        {
            var base64EncodedBytes = System.Convert.FromBase64String(value);
            return Encoding.UTF8.GetString(base64EncodedBytes);
        }
E finalmente, para verificar se a string é de fato um base64 válido
        public static bool IsBase64(string value)
        {
            Span<byte> buffer = new Span<byte>(new byte[value.Length]);
            return Convert.TryFromBase64String(value, buffer, out int _);
        }
Usando
Para utilizar basta chamar as funções, um exemplo no meu caso:
return Redirect("/usuario/login?redir=" + StringHelper.EncodeBase64("/arquivo/novo"));
Após ter codificado uma url de forma segura, na controller simplesmente usei:
if (string.IsNullOrEmpty(model.Redir) || !StringHelper.IsBase64(model.Redir))
            {
                return Redirect("/home");
            }
            else
            {
                    model.Redir = StringHelper.DecodeBase64(model.Redir);
                if (Uri.IsWellFormedUriString(model.Redir, UriKind.RelativeOrAbsolute))
                {
                    return Redirect(model.Redir);
                }
            }
 
 
              
 
    
Top comments (0)