c# - Request.Url.Query 和 Request.QueryString 有什么区别?

标签 c# .net url url-rewriting query-string

我一直在追踪一个关于 Url Rewriting 应用程序的错误。该错误表现为查询字符串中某些变音符号的编码问题。

基本上,问题是基本上是/search.aspx?search=heřmánek 的请求被重写为“search=he%c5%99m%c3%a1nek”的查询字符串

正确的值(使用一些不同的工作代码)是将查询字符串重写为“search=he%u0159m%u00e1nek”

注意两个字符串之间的区别。但是,如果您将两者都发布,您将看到 Url 编码重现相同的字符串。直到您使用 context.Rewrite 函数,编码才会中断。损坏的字符串返回“heÅmánek”(使用 Request.QueryString["Search"],工作字符串返回“heřmánek”。此更改发生在调用重写函数之后。

我将其追溯到一组使用 Request.QueryString(有效)的代码,另一组使用 Request.Url.Query(request.Url 返回一个 Uri 实例)。

虽然我已经解决了这个错误,但我对这里的理解存在漏洞,所以如果有人知道其中的区别,我已经准备好上课了。

最佳答案

你的问题确实引起了我的兴趣,所以我在过去一个小时左右的时间里读了一些书。我不是绝对肯定我找到了答案,但我会把它扔出去看看你的想法。

据我目前所读的内容,Request.QueryString 实际上是“ServerVariables 集合中 QUERY_STRING 变量的解析版本” [reference] ,其中 Request.Url 是(如您所述)封装在 Uri 对象中的原始 URL。根据this article ,Uri 类的构造函数“...解析 [url 字符串],将其置于规范格式,并进行任何所需的转义编码。”

因此,Request.QueryString 似乎使用不同的函数来解析来自 ServerVariables 构造函数的“QUERY_STRING”变量。这可以解释为什么您会看到两者之间的区别。现在,为什么自定义解析函数和 Uri 对象的解析函数使用不同的编码方法完全超出了我的范围。也许更精通 aspnet_isapi DLL 的人可以为这个问题提供一些答案。

无论如何,希望我的帖子有意义。在旁注中,我想添加另一个引用,它也提供了一些非常详尽和有趣的阅读:http://download.microsoft.com/download/6/c/a/6ca715c5-2095-4eec-a56f-a5ee904a1387/Ch-12_HTTP_Request_Context.pdf

关于c# - Request.Url.Query 和 Request.QueryString 有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2219647/

相关文章:

c# - 获取方法在 web api 中不起作用

c# - 如何在 Silverlight 中创建客户端帮助程序类?

c# - 为什么使用ffmpeg实时创建视频文件时,ffmpeg.exe会占用1GB内存?

javascript - HTML 强制用户从 URL 下载 PDF 文件

java - HTML 基本元素不会将上下文附加到来自 JSP 标记文件的头链接

c# - 检查 `object[] args` 是否满足委托(delegate)实例?

c# - LINQ lambda 表达式替换字符串中的多个字符?

c# - 忽略连接字符串中的连接超时属性

.net - 如何将 CheckBox 绑定(bind)到可为 null 的 bool 类型 DbColumn?

javascript - 如何在javascript中从img src获取 "real"url