长话短说: 问题:快速问题:如何对(任何类型的)原始数据进行编码和解码并将其放置在命名路径中?!由于以下异常,我利用的方法似乎失败了:“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.
我有一个与此格式匹配的 Dotnet Core Rest API 端点。
[Route("/ipaddress/pivotSearch/{key}/{value}/{incomingPage?}")]
public async Task<IActionResult> pivotSearch(string key, string value, int page = 1){}
由于 / 等特殊字符会干扰路由,无法通过请求传递 Base64。因此,除了Base64,我还通过DataEscapeString对特殊字符进行了转义。
我使用 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()));
}
}
当我的控制器被击中时。我收到此错误: 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)
在我看来,我使用这样的编码解码功能
<a href="/ipaddress/pivotSearch/@PivotSearchKeyEnum.BANNER_VALUE.ToString()/@content.SmartEncode()/1" target="_blank"> TEST </a>
以下内容智能编码失败:
我只是不明白我在这里缺乏什么知识。我已经检查过网站,它们似乎是 https://www.base64decode.org/ 并且它们似乎可以解码。为什么?!!?