代码之家  ›  专栏  ›  技术社区  ›  HT1

带Put的Azure搜索和CORS问题

  •  0
  • HT1  · 技术社区  · 7 年前

    这是我的第一个后续问题 post .我已经成功地将我的AngularJS网站部署到了Azure,并且我可以使用RESTAPI GET方法与Azure Search进行交互。现在我用一种Put方法来面对这个问题。它抱怨我的飞行前请求没有通过控制检查。通过检查网络流量,我可以看到浏览器正在对Azure搜索执行选项请求方法,并且没有找到响应代码404。

    我注意到有人面对过这个 problem 解决方法是使用标准定价层。我已经达到了标准,问题仍然存在。我的角搜索CORS已经设置为“*”。我还尝试通过添加headers选项来修改客户端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问题的看跌期权:

    $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 回复  |  直到 7 年前
        1
  •  0
  •   Bruce Johnston    7 年前

    这里有一些问题阻碍了这项工作的开展。

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

    其次,看跌请求不起作用的原因有三个:

    1. 它返回404,因为URL不正确,假设您正在尝试将文档上载到索引。索引API的URL是 https://<search-service-name>.search.windows.net/indexes/<index-name>/docs/index .
    2. 索引API是通过post访问的,而不是put。
    3. 即使您有正确的URL和HTTP方法,CORS也不支持索引API。Azure Search仅支持通过CORS进行的查询操作。不支持管理操作或修改数据的操作。记录在案 here .

    如果您的目标是从浏览器将文档上载到索引,那么您需要以某种方式代理请求。通常我们建议从您自己的Web API/中间层调用Azure Search,因为这样可以避免将API密钥发送到浏览器。

    推荐文章