PUT

时间:2018-06-14 17:38:33

标签: cors azure-search

这是我第一次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"
                }
            ]
        }

1 个答案:

答案 0 :(得分:0)

这里存在一些阻止此工作的问题。

首先,主机名似乎不正确。它们应该是带有.search.windows.net后缀的完全限定域名,但似乎并非如此。

其次,PUT请求不会有三个原因:

  1. 它返回404,因为URL不正确,假设您正在尝试将文档上传到索引。 Index API的网址为https://<search-service-name>.search.windows.net/indexes/<index-name>/docs/index
  2. 通过POST访问Index API,而不是PUT。
  3. 即使您拥有正确的URL和HTTP方法,也不会通过CORS支持Index API。 Azure Search仅支持通过CORS进行查询操作。不支持修改数据的管理操作或操作。记录在案here
  4. 如果您的目标是从浏览器将文档上传到索引,那么您需要以某种方式代理请求。通常我们建议您从自己的Web API /中间层调用Azure搜索,因为这样可以避免将api-key发送到浏览器。