如何解析SharePoint搜索中心网站的精简过滤参数(r参数)
在SharePoint搜索中心网站,有时候,我们需要使用自定义代码,对用户正在进行的搜索操作,进行一些额外的处理。比如,在一个自定义Web部件中,根据用户的搜索关键字,执行一些特定操作。这个时候,我们需要根据URL中的参数,来解析出用户所使用的关键字和其他搜索参数。
如果只是要得到搜索关键字本身,是非常简单的。稍微观察一下URL,就能立刻了解到,k这个参数的值,就是用户所使用的搜索关键字。在代码中,只需要对它进行一下url decode操作即可。
但是,如果用户使用了精简面板(就是搜索结果页面左侧,那个可以通过结果类型、来源进行过滤的面板)来对搜索结果进行过滤,那么要在URL中,解析出用户所使用的精简参数,就不那么容易了。(我以前曾经写过一篇文章,为SharePoint搜索创建自定义优化参数,介绍了如何对精简面板进行自定义。)
首先观察一下URL,会发现多了一个r参数。这个参数就是用户点击了左侧的精简面板后,所生成的一个精简参数。
分析r参数的值,format%3D%22AQ5NaWNyb3NvZnQgV29yZAZmb3JtYXQBAl4iAiIk%22,你应该也能想到这个肯定进行过url编码。所以第一步,先对r参数的值进行url decode操作。然后你会得到这样一个值:format="AQ5NaWNyb3NvZnQgV29yZAZmb3JtYXQBAl4iAiIk"。
这个精简参数的前半段,format=,很容易理解,format是一个托管属性。那么等号右侧的值又应该如何进一步解析呢?看到这些字母加上数字的组合,略加猜测,你应该能想到这是一个进行了Base64编码的字符串。
OK,对AQ5NaWNyb3NvZnQgV29yZAZmb3JtYXQBAl4iAiIk进行一下Base64反编码,哇,果然,你就得到了一个更容易理解的字符串,不过,这个字符串如果显示出来,会有些怪怪的:
这到底是一个什么格式的字符串呢?经过仔细分析,这其实是一个如下格式的字符串(竖线符号仅仅用来做让它显示起来更清楚,字符串中并不包含):
一个不需要关心的Char | 一个表示属性值的长度的数字转化后的Char | 真正有用的属性值 | 一个表示属性名称的长度的数字转化后的Char | 属性名称 | 两个不需要关心的Char | ^字符 | 双引号字符 | 一个不需要关心的Char | 双引号字符 | $字符
其实我们需要的,只是里面的那个“真正有用的属性值”。所以,你只要在代码中跳过两个Char,然后再找到属性名称(在我们的例子中,也就是前面那个format),从这个位置再往前一个Char,最后得到的就是你需要的属性值了。于是,最后我们就得到了这个精简参数的定义:format=”Microsoft Word”。
如果用户在精简面板上点击了多个精简参数,那么URL中r参数的值进行url decode之后,会使用空格符分成多个字符串,分别按照上面的规则分别解析即可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· .NET周刊【3月第1期 2025-03-02】
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· [AI/GPT/综述] AI Agent的设计模式综述