gpt4 book ai didi

asp.net - .Net Uri 编码 RFC 2396 与 RFC 3986

转载 作者:行者123 更新时间:2023-12-02 17:43:55 28 4
gpt4 key购买 nike

首先,一些简单的背景知识...作为与第三方供应商集成的一部分,我有一个 C# .Net Web 应用程序,它接收一个 URL,其中包含查询字符串中的大量信息。该 URL 使用 MD5 哈希值和共享 key 进行签名。基本上,我提取查询字符串,删除它们的哈希值,对剩余的查询字符串执行我自己的哈希值,并确保我的哈希值与提供的匹配。

我通过以下方式检索 Uri...

Uri uriFromVendor = new Uri(Request.Url.ToString());
string queryFromVendor = uriFromVendor.Query.Substring(1); //Substring to remove question mark

我的问题源于包含特殊字符(如元音变音 (ü))的查询字符串。供应商根据 RFC 2396 表示(%FC)计算其哈希值。我的 C# .Net 应用程序根据 RFC 3986 表示(%C3%BC)计算其哈希值。不用说,我们的哈希值不匹配,我抛出了我的错误。

奇怪的是,documentation for the Uri class in .Net说它应该遵循 RFC 2396,除非另外设置为 RFC 3986,但我的 web.config 文件中没有他们所说的此行为所需的条目。

如何强制 Uri 构造函数使用 RFC 2396 约定?

如果做不到这一点,是否有一种简单的方法可以将 RFC 3986 八位位组对转换为 RFC 2396 八位位组?

最佳答案

Nothing to do with your question, but why are you creating a new Uri here? You can just do string queryFromVendor = Request.Url.Query.Substring(1); – atticae

为阁楼+1!我回去尝试删除我正在创建的无关 Uri,突然,该字符串的元音变音编码为 UTF-8 而不是 UTF-16。

起初,我认为这行不通。在此过程中,我尝试使用 Request.QueryString 检索 url,但这导致元音变音显示为 %ufffd,即 � 字符。为了采取新的视角,我尝试了 atticae 的建议,它奏效了。

我很确定答案与 something I read here 有关。 .

C# uses UTF-16 in all its strings, with tools to encode when it comes to dealing with streams and files that bring us onto...

ASP.NET uses UTF-8 by default, and it's hard to think of a time when it isn't a good choice...

我的问题源于这里......

Uri uriFromVendor = new Uri(Request.Url.ToString());

通过获取 Request.Url uri 并创建另一个 uri,它被编码为 C# 标准 UTF-16。通过使用原始的uri,它保留在.Net标准UTF-8中。

感谢大家的帮助。

关于asp.net - .Net Uri 编码 RFC 2396 与 RFC 3986,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7034209/

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