- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在将一个针对 net472
的项目移植到 netstandard
。我遇到的最后一个 System.Web
依赖项是 HttpServerUtility.UrlTokenEncode(Byte[])
.
我找到了Microsoft.AspNetCore.WebUtilities
,其中包含 Base64UrlTextEncoder
和 WebEncoders
,但它们不能与 UrlTokenEncode
/Decode
互换,因为它附加/期望 =
padding characters 的数量。最后,例如:
var data = Encoding.UTF8.GetBytes("SO");
Convert.ToBase64String(data); // U08=
HttpServerUtility.UrlTokenEncode(data); // U081 - this is what's expected and
// the only thing UrlTokenDecode can handle
Base64UrlTextEncoder.Encode(data); // U08
WebEncoders.Base64UrlEncode(data); // U08
据我所知,没有其他差异(我使用随机字符串进行了测试),但它还引入了一些其他依赖项(Microsoft.Net.Http.Headers 和 Microsoft.Extensions.Primitives),我认为在该项目中并不真正需要。
是否有任何 nuget 软件包可以直接替换?如果没有的话,我正在考虑自己实现。
最佳答案
对于那些寻找这个已删除实用方法的答案并希望迁移遗留应用程序的人,我已经从 M$ 源代码中进行了一些摘录。
private static string UrlTokenEncode(byte[] input)
{
if (input == null)
throw new ArgumentNullException("input");
if (input.Length < 1)
return String.Empty;
char[] base64Chars = null;
////////////////////////////////////////////////////////
// Step 1: Do a Base64 encoding
string base64Str = Convert.ToBase64String(input);
if (base64Str == null)
return null;
int endPos;
////////////////////////////////////////////////////////
// Step 2: Find how many padding chars are present in the end
for (endPos = base64Str.Length; endPos > 0; endPos--)
{
if (base64Str[endPos - 1] != '=') // Found a non-padding char!
{
break; // Stop here
}
}
////////////////////////////////////////////////////////
// Step 3: Create char array to store all non-padding chars,
// plus a char to indicate how many padding chars are needed
base64Chars = new char[endPos + 1];
base64Chars[endPos] = (char)((int)'0' + base64Str.Length - endPos); // Store a char at the end, to indicate how many padding chars are needed
////////////////////////////////////////////////////////
// Step 3: Copy in the other chars. Transform the "+" to "-", and "/" to "_"
for (int iter = 0; iter < endPos; iter++)
{
char c = base64Str[iter];
switch (c)
{
case '+':
base64Chars[iter] = '-';
break;
case '/':
base64Chars[iter] = '_';
break;
case '=':
Debug.Assert(false);
base64Chars[iter] = c;
break;
default:
base64Chars[iter] = c;
break;
}
}
return new string(base64Chars);
}
private static byte[] UrlTokenDecode(string input)
{
if (input == null)
throw new ArgumentNullException("input");
int len = input.Length;
if (len < 1)
return new byte[0];
///////////////////////////////////////////////////////////////////
// Step 1: Calculate the number of padding chars to append to this string.
// The number of padding chars to append is stored in the last char of the string.
int numPadChars = (int)input[len - 1] - (int)'0';
if (numPadChars < 0 || numPadChars > 10)
return null;
///////////////////////////////////////////////////////////////////
// Step 2: Create array to store the chars (not including the last char)
// and the padding chars
char[] base64Chars = new char[len - 1 + numPadChars];
////////////////////////////////////////////////////////
// Step 3: Copy in the chars. Transform the "-" to "+", and "*" to "/"
for (int iter = 0; iter < len - 1; iter++)
{
char c = input[iter];
switch (c)
{
case '-':
base64Chars[iter] = '+';
break;
case '_':
base64Chars[iter] = '/';
break;
default:
base64Chars[iter] = c;
break;
}
}
////////////////////////////////////////////////////////
// Step 4: Add padding chars
for (int iter = len - 1; iter < base64Chars.Length; iter++)
{
base64Chars[iter] = '=';
}
// Do the actual conversion
return Convert.FromBase64CharArray(base64Chars, 0, base64Chars.Length);
}
关于.net - HttpServerUtility.UrlTokenEncode 替换 netstandard,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50731397/
我正在将一个针对 net472 的项目移植到 netstandard。我遇到的最后一个 System.Web 依赖项是 HttpServerUtility.UrlTokenEncode(Byte[])
我在 C# 中有一段代码对字符串进行编码并返回 URL 安全字符串(稍后解码) string stringToEncrypt = "Winter is coming"; byte[] bytes =
我在尝试用 Java 编码 String 时遇到了麻烦。 我有以下 C# 代码和字符串 Bpz2Gjg01d7VfGfD8ZP1UA==,当我执行 C# 代码时,我得到: QnB6MkdqZzAxZD
如何使用 HttpServerUtility.UrlTokenDecode 在 Java 中编码将在 C# 中解码的字符串? 最佳答案 以下方法复制了 C# 功能。 public static Str
我试图从 Web API 项目中移除对 System.Web.dll 的依赖,但无意中发现了对 HttpServerUtility.UrlTokenEncode(byte[] input) 的调用(及
我是一名优秀的程序员,十分优秀!