C# Base64 编码和解码

问题描述 投票:0回答:0

长话短说: 问题:快速问题:如何对(任何类型的)原始数据进行编码和解码并将其放置在命名路径中?!由于以下异常,我利用的方法似乎失败了:“System.FormatException:输入不是有效的 Base-64 字符串”解码发生时发送某些类型的数据。请记住,可以发送的数据可以包含任何随机字符和特殊字符。

问题:快速问题:如何对(任何类型的)原始数据进行编码和解码并将其放置在命名路径中?!

Exception: System.FormatException: The input is not a valid Base-64 string as it contains a non-base 64 characters, more than two padding characters, or an illegal character among the padding characters.
  1. 我有一个与此格式匹配的 Dotnet Core Rest API 端点。

     [Route("/ipaddress/pivotSearch/{key}/{value}/{incomingPage?}")]
     public async Task<IActionResult> pivotSearch(string key, string value, int page = 1){}
    
  2. 由于 / 等特殊字符会干扰路由,无法通过请求传递 Base64。因此,除了Base64,我还通过DataEscapeString对特殊字符进行了转义。

  3. 我使用 StackOverflow 创建了一个简单的编码和解码函数,我在我的控制器中使用它。

    public static string SmartEncode(this string value)
    {
        string convertToBase64String = @Convert.ToBase64String(@Encoding.UTF8.GetBytes(value));
        return Uri.EscapeDataString(convertToBase64String);
    
        //return @HttpUtility.UrlEncode(convertToBase64String);
        }
    
    public static string SmartDecode(this string value)
    {
        try
        {
            Log.Information($"Initial String To Decode: {value}");
            var decodeUrlString = Uri.UnescapeDataString(value.Trim()); ;
    
            Log.Information($"UrlDecode String: {decodeUrlString}");
            Log.Information($"UrlDecode String: #{decodeUrlString.Length}");
    
            return Encoding.UTF8.GetString(Convert.FromBase64String(decodeUrlString.Trim() + "="));
        }
        catch (Exception)
        {
            return Encoding.UTF8.GetString(Convert.FromBase64String(value.Trim()));
        }
    }
    
  4. 当我的控制器被击中时。我收到此错误: PGh0dHBzOi8vY3NlLmVuZ2luLnVtaWNoLmVkdS8/cD0xNzc2PjsgcmVsPXNob3J0bGluaw== 导致上面列出的错误。

         This is a VALID Base64 String: Go here https://www.base64decode.org/ To see. 
         CONSOLE: [14:52:45 INF] Initial String To Decode: 
         PGh0dHBzOi8vY3NlLmVuZ2luLnVtaWNoLmVkdS8%2FcD0xNzc2PjsgcmVsPXNob3J0bGluaw==
         CONSOLE: [14:52:45 INF] UrlDecode String: 
         PGh0dHBzOi8vY3NlLmVuZ2luLnVtaWNoLmVkdS8/cD0xNzc2PjsgcmVsPXNob3J0bGluaw==
         CONSOLE: [14:52:45 INF] UrlDecode String: #72
         CONSOLE: [14:52:45 ERR] Exception: System.FormatException: The input is not a valid Base-64 string as it contains a non-base 64 character, more than two padding characters, or an illegal character among the padding characters.
    at System.Convert.FromBase64CharPtr(Char* inputPtr, Int32 inputLength)
    at System.Convert.FromBase64String(String s)
    at FreeThreatFeedLibrary.Helper.ExtensionMethods.SmartDecode(String value)
    
  5. 在我看来,我使用这样的编码解码功能

    <a href="/ipaddress/pivotSearch/@PivotSearchKeyEnum.BANNER_VALUE.ToString()/@content.SmartEncode()/1" target="_blank"> TEST </a>
    

以下内容智能编码失败:

  1. 1B7AE3AAF003CA8A23ACBA351CBA8084A7712F3B
  2. PGh0dHBzOi8vY3NlLmVuZ2luLnVtaWNoLmVkdS8%2FcD0xNzc2PjsgcmVsPXNob3J0bGluaw==

我只是不明白我在这里缺乏什么知识。我已经检查过网站,它们似乎是 https://www.base64decode.org/ 并且它们似乎可以解码。为什么?!!?

c# asp.net-core base64 urlencode
© www.soinside.com 2019 - 2024. All rights reserved.