gpt4 book ai didi

.net - 如何使 System.Uri 不转义路径中的 %2f(斜杠)?

转载 作者:行者123 更新时间:2023-12-04 01:04:39 25 4
gpt4 key购买 nike

当 System.Uri 构造函数在 URL 的路径部分看到它们时,它坚持将 %2f 序列作为正斜杠进行转义。我怎样才能避免这种行为?

我见过Connect这张票,但据我所知,解决方法不适用于 .net 4。

最佳答案

它在内部保留原始字符串,例如,以下代码:

    Uri u = new Uri("http://www.example.com/path?var=value%2fvalue");
Console.WriteLine(u.OriginalString);

会显示
http://www.example.com/path?var=value%2fvalue

编辑 : 我已经更新了 Connect Link Workaround 中的代码对于最近的 .NET 版本。这里是:
// System.UriSyntaxFlags is internal, so let's duplicate the flag privately
private const int UnEscapeDotsAndSlashes = 0x2000000;
private const int SimpleUserSyntax = 0x20000;

public static void LeaveDotsAndSlashesEscaped(Uri uri)
{
if (uri == null)
throw new ArgumentNullException("uri");

FieldInfo fieldInfo = uri.GetType().GetField("m_Syntax", BindingFlags.Instance | BindingFlags.NonPublic);
if (fieldInfo == null)
throw new MissingFieldException("'m_Syntax' field not found");

object uriParser = fieldInfo.GetValue(uri);
fieldInfo = typeof(UriParser).GetField("m_Flags", BindingFlags.Instance | BindingFlags.NonPublic);
if (fieldInfo == null)
throw new MissingFieldException("'m_Flags' field not found");

object uriSyntaxFlags = fieldInfo.GetValue(uriParser);

// Clear the flag that we don't want
uriSyntaxFlags = (int)uriSyntaxFlags & ~UnEscapeDotsAndSlashes;
uriSyntaxFlags = (int)uriSyntaxFlags & ~SimpleUserSyntax;
fieldInfo.SetValue(uriParser, uriSyntaxFlags);
}

当然,这是一个黑客,所以你应该自担风险使用它:-)

关于.net - 如何使 System.Uri 不转义路径中的 %2f(斜杠)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5774183/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com