使用ASP.net进行OpenSearch自动完成

时间:2013-03-15 21:12:25

标签: c# php asp.net json

我的网站目前使用以下代码向Chrome添加自定义Omnibox搜索引擎:

ombnibox.xml

<?xml version="1.0"?>
<OpenSearchDescription xmlns="http://a9.com/-/spec/opensearch/1.1/">
  <ShortName>Example </ShortName>
  <Description>Example Search</Description>
  <Url type="text/html" template="http://Example.com /search.aspx?searchVal=    {searchTerms}"></Url>
</OpenSearchDescription>

我的网站母版页包含:

<link type="application/opensearchdescription+xml" title="Example" rel="search" href="/omnibox.xml" />

这非常有效,用户可以毫无问题地进入我的搜索结果页面。我想将搜索建议集成到这个自定义搜索引擎中,但我甚至不知道从哪里开始。我发现了一堆返回JSON的PHP示例,但我找不到ASP.net的示例或从数据库中检索结果建议的示例。

任何帮助都会很棒。

2 个答案:

答案 0 :(得分:0)

您需要将以下行添加到xml文件

<Url type="application/x-suggestions+json" method="get" template="http://www.domain.co.uk/autocomplete" />

并获得以下格式的结果:

["bm",["BMW","BMW X5","BMW X3","BMW 5 Series","BMW 1 Series","BMW 1 Series Cabriolet","BMW 3 Series","BMW Z4","BMW 3 Series Compact","BMW 116i"]]

查看Mozilla's documentation

我希望这对你有所帮助。

答案 1 :(得分:0)

我更多地研究了这个,我能够创建一个Web服务,返回正确格式化的JSON值,供Omnibox使用 !!但是! Omnibox代码需要“GET” “调用request来访问默认情况下被ASP.net阻止的Web服务。一旦我覆盖了ASP.NET的默认设置以允许GET请求,它只允许我返回XML格式的值。

我目前的假设是,除非我创建一个nonASP.net网络服务,否则不能使用Omnibox预先输入功能。

更新

我能够使用ASP.NET MVC WebAPI和以下代码来解决这个问题:

public object Get(string id)
    {
        List<ResultObject> resultValues = new List<ResultObject>();

        foreach (string val in ***SQLQUERYRESULTS***)
        {
            test singleResult = new ResultObject();
            singleResult.Name = val;
            singleResult.Description = "Server";
            singleResult.Url = "***CUSTOMURL***?ServerName=" + val;
            resultValues.Add(singleResult);

        }
        var entities = resultValues;
        var names = entities.Select(m => m.Name);
        var description = entities.Select(m => m.Description);
        var urls = entities.Select(m => m.Url);
        var entitiesJson = new object[] { id, names, description, urls };

        return entitiesJson;
    }
}


public class ResultObject
{
    public string Name { get; set; }
    public string Description { get; set; }
    public string Url { get; set; }

}