Bru*_*man 13 .net c# url url-rewriting query-string
我一直在追踪Url重写应用程序的错误.该错误显示为查询字符串中某些变音字符的编码问题.
基本上,问题是基本上是/search.aspx?search=heřmánek的请求被重写了"search = he%c5%99m%c3%a1nek"的查询字符串
正确的值(使用一些不同的工作代码)是将查询字符串重写为"search = he%u0159m%u00e1nek"
注意两个字符串之间的区别.但是,如果您同时发布,则会看到Url Encoding会重现相同的字符串.直到你使用编码中断的context.Rewrite函数.断开的字符串返回'heÅmánek'(使用Request.QueryString ["Search"],工作字符串返回'heřmánek'.这个改变发生在调用重写函数之后.
我使用Request.QueryString(工作)跟踪到一组代码,另一组使用Request.Url.Query(request.Url返回一个Uri实例).
虽然我已经解决了这个问题,但我的理解还有一个漏洞,所以如果有人知道这个差异,我就准备好了.
你的问题确实激发了我的兴趣,所以我在过去一个小时左右的时间里读了一些书。我并不绝对肯定我已经找到了答案,但我会把它扔在那里看看你的想法。
从我到目前为止所读到的内容来看,Request.QueryString实际上是“ServerVariables集合中QUERY_STRING变量的解析版本” [参考],其中Request.Url是(如您所述)封装在Uri对象中的原始URL 。根据这篇文章,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