这是我第一次post的后续问题。我已成功将AngularJS网站部署到Azure,我可以使用REST API GET方法与Azure Search进行交互。现在我正面临着PUT方法的问题。抱怨我的预检请求没有通过控制检查。通过检查网络流量,我可以看到浏览器正在对Azure搜索执行OPTIONS请求方法,响应代码为404 Not Found。
我注意到其他人遇到了这个problem,并且解决方法是使用标准定价层。我已经在标准,问题仍然存在。我的角色搜索CORS已设置为“*”。我试图通过添加标题选项来修改我的客户端AngularJS $ http代码,但仍无效。
任何想法都将受到赞赏。
更新#2回答@Bruce Johnston,我想我无法将太多代码粘贴为注释块,所以我会将它们放在这里。
这是一个可操作的$ http.get:
$http.get("https://mywebsibe/indexes/contact1/docs?api-version=2016-09-01",
{
headers: {
"Accept": "application/json",
"api-key": "xxx"
},
params: {
//api-version: '2016-09-01',
queryType: "full",
search: searchString
}
}
)
这是遇到CORS问题的PUT:
$http.put("https://mywebsite/indexes/contact1/docs?api-version=2017-11-11",
{
headers: {
"Access-Control-Allow-Credentials": "true",
"Access-Control-Allow-Origin": "*",
"Access-Control-Allow-Methods": "POST, GET, OPTIONS, DELETE",
"Access-Control-Allow-Headers": "Origin, X-Requested-With, Content-Type, Accept",
"Accept": "application/json",
"api-key": "xxx"
},
data: {
"value": [
{
"@search.action": "upload",
"ContactId": "id1",
"FirstName": "New",
"LastName": "Guy",
"Dob": "1990-01-31",
"Gender": "M",
"Email": "ng@somewhere.org"
}
]
}
答案 0 :(得分:0)
这里存在一些阻止此工作的问题。
首先,主机名似乎不正确。它们应该是带有.search.windows.net
后缀的完全限定域名,但似乎并非如此。
其次,PUT请求不会有三个原因:
https://<search-service-name>.search.windows.net/indexes/<index-name>/docs/index
。如果您的目标是从浏览器将文档上传到索引,那么您需要以某种方式代理请求。通常我们建议您从自己的Web API /中间层调用Azure搜索,因为这样可以避免将api-key发送到浏览器。