【问题标题】:invoke ibm watson discovery adddocument api using httpwebrequest使用 httpwebrequest 调用 ibm watson discovery adddocument api
【发布时间】:2018-08-31 10:30:39
【问题描述】:

我需要将 watson 发现功能集成到使用 Visual Studio 2015 框架 4.5 开发的现有 Windows 服务应用程序中。

我们无法升级框架版本,因此 nuget 库 ibm.watson 无法正常工作。

我尝试转换这个 curl 命令

curl -X POST -u "{username}":"{password}" -F "file=@c:\temp\1.json" https://gateway-fra.watsonplatform.net/discovery/api/v1/environments/{environment}/collections/{collection}/documents?version=2017-11-07

进入c#代码:

  void test
    {

        ServicePointManager.Expect100Continue = true;
        ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;

        string username = "{username}";
        string password = "{password}";
        string postData = File.ReadAllText(@"c:\temp\1.json");

        string BASE_URL = "https://gateway-fra.watsonplatform.net/discovery/api/";
        string url = BASE_URL + "/v1/environments/{environment}/collections/{collection}/documents";

        var request = (HttpWebRequest)WebRequest.Create(url);

        var data = Encoding.ASCII.GetBytes(postData);

        request.Method = "POST";
        request.ContentType = "application/json";
        request.ContentLength = data.Length;
        request.Credentials = new NetworkCredential(username, password);

        using (var stream = request.GetRequestStream())
        {
            stream.Write(data, 0, data.Length);
        }

        var response = (HttpWebResponse)request.GetResponse();

        var responseString = new  StreamReader(response.GetResponseStream()).ReadToEnd();
 catch (WebException wex)
            {
                HttpWebResponse oHttpWebResponse = (HttpWebResponse)wex.Response;

                Encoding oEncoding = Encoding.GetEncoding(1252);
                string sEx = string.Empty;
                using (StreamReader oStreamReader = new StreamReader(oHttpWebResponse.GetResponseStream(), oEncoding))
                {
                    sEx = oStreamReader.ReadToEnd();
                    oStreamReader.Close();
                }
                System.Diagnostics.Debug.WriteLine(sEx);
            }
            catch (Exception ex)
            {
                System.Diagnostics.Debug.WriteLine(ex.ToString());
            }
}

但得到这个错误:

{
  "code": 400,
  "error": "The request does not contain a \"file\" part or \"metadata\" part. Include at least one of those parts and resubmit your request."
}

向请求添加文件或元数据的方法是什么?

【问题讨论】:

标签: .net watson-discovery


【解决方案1】:

这对我有用:

async Task<string> Upload()
        {
            string environmentId = "xxx";
            string collectionId = "xxx";
            string username = "xxx";
            string password = "xxx";
            string sResult = string.Empty;
            string filename = @"c:\temp\watson\2824.json";
            string url = $"https://gateway-fra.watsonplatform.net/discovery/api/v1/environments/{environmentId}/collections/{collectionId}/documents?version=2018-08-01";
            FileStream fileStream = new FileStream(filename, FileMode.Open);
            HttpContent fileStreamContent = new StreamContent(fileStream);
            var credentials = new NetworkCredential(username, password);
            var handler = new HttpClientHandler { Credentials = credentials };
            using (var client = new HttpClient(handler))
            {
                using (var formData = new MultipartFormDataContent())
                {
                    formData.Add(fileStreamContent, "file", filename);
                    var response = await client.PostAsync(url, formData);
                    if (response.IsSuccessStatusCode)
                    {
                        Stream oStream = await response.Content.ReadAsStreamAsync();
                        using (var reader = new StreamReader(oStream))
                        {
                            sResult = reader.ReadToEnd();
                            reader.Close();
                        }
                    }
                }
            }
            fileStream.Close();
            return sResult;
        }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-06-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-29
    • 1970-01-01
    • 2020-02-27
    • 1970-01-01
    相关资源
    最近更新 更多