首先,我知道这个标题听起来很奇怪,但这是我们的一位客户提出的有效且合格的要求。我们希望做的是向他们显示由于无法访问而未显示在搜索结果中的所有记录的记录名称和位置(只读)。
public class VisualWebPart1 : Microsoft.Office.Server.Search.WebControls.CoreResultsWebPart
{
protected override void ConfigureDataSourceProperties()
{
base.ConfigureDataSourceProperties();
CoreResultsDatasource ds = DataSource as CoreResultsDatasource;
if (ds.UserCredentials.ContainsKey(ds.Location))
ds.UserCredentials.Remove(ds.Location);
ds.UserCredentials.Add(ds.Location, new NetworkCredential("user", "password", "domain"));
}
}
现在,我们想要执行此操作的第一种方法是直接使用搜索 API 调用 FAST 搜索 Web 服务。但是,我们希望它能够与现有的快速搜索中心无缝协作,即它们仍然可以使用现有的搜索框、高级搜索等。据我们了解,除非我们将 API 转换为基于 URL 的搜索查询,否则该 API 可能无法很好地集成查询到 FQL。如果有如下替代方案,我们宁愿不走这条路;
我们有一个想法来扩展 CoreResultsWebPart 组件,以便在执行搜索时将用户权限临时提升为管理员帐户。反编译并查看 CoreResultsWebPart 的代码后,我认为使用以下代码会非常简单;
但是,我们错了,这根本行不通。查看 CoreResultsWebPart 的代码很奇怪,我没有看到任何其他访问控制机制,我的意思是,除了数据源 (UserCredentials) 中的此处,我没有看到正在处理用户凭据的任何地方。 '确定 CoreResultsWebpart 必须直接调用 Web 服务,但我不知道凭据传递到哪里。
在我们开始研究简单地创建自定义 Web 部件之前,我们将不胜感激任何帮助。即使是告诉我我们走错了路!
谢谢!
阿德里安