2015-10-29 5 views
1

Клиент использует службу Watson Dialog от IBM, и я не могу найти примеров того, кто делает даже самые базовые вещи, используя .Net (C# в частности).Как использовать службу IBM Watson Dialog с помощью C#?

IBM показывает только примеры использования Curl, Node и Java ...

Моя первая цель состоит в том, чтобы иметь возможность добавить новый XML-файл (диалоговое дерево) на службу Ватсон. Кажется довольно простым, но я уже немного избиваю голову.

ответ

3

Итак, я, наконец, получил эту работу, объединив помощь около десятка поисковых запросов Google по смежным темам. Думал, что я разместил рабочую версию здесь.

Ниже приведен код, который будет загружать xml-файл в службу Watson Dialog с использованием C# в контроллере MVC.

Передняя часть - это форма, в которой используется дружественное имя (которое я превращаю в имя файла .xml), и загрузка самого файла (с использованием dropzone).

Я уверен, что могут быть оптимизации, но я надеюсь, что это поможет кому-то. Хорошей новостью является то, что это можно использовать в качестве основы для выполнения любого вызова службы Watson Dialog (добавление, обновление, удаление).

public ContentResult Save(FormCollection form) 
    { 
     try 
     { 
      var name = form["txtDialogName"]; 

      var filename = name + ".xml"; 
      byte[] bytes = null; 

      foreach (string s in Request.Files) 
      { 
       var file = Request.Files[s]; 

       using (Stream inputStream = file.InputStream) 
       { 
        MemoryStream memoryStream = inputStream as MemoryStream; 
        if (memoryStream == null) 
        { 
         memoryStream = new MemoryStream(); 
         inputStream.CopyTo(memoryStream); 
        } 

        bytes = memoryStream.ToArray(); 
       } 

       break; 
      } 

      if (bytes == null) 
      { 
       var contentResult = new ContentResult 
       { 
        ContentType = "application/json", 
        Content = null 
       }; 
       return contentResult; 
      } 


      var basePath = ConfigurationManager.AppSettings["WatsonPath"]; 

      var username = ConfigurationManager.AppSettings["WatsonUsername"]; 
      var password = ConfigurationManager.AppSettings["WatsonPassword"]; 
      string credentials = Convert.ToBase64String(Encoding.ASCII.GetBytes(string.Format("{0}:{1}", username, password))); 

      var values = new[] 
         { new KeyValuePair<string, string>("name", filename) }; 

      using (var client = new HttpClient()) 
      using (var formData = new MultipartFormDataContent()) 
      { 
       client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic", credentials); 

       foreach (var keyValuePair in values) 
       { 
        formData.Add(new StringContent(keyValuePair.Value), string.Format("\"{0}\"", keyValuePair.Key)); 
       } 

       formData.Add(new ByteArrayContent(bytes), 
           '"' + "file" + '"', 
           '"' + filename + '"'); 

       var response = client.PostAsync(basePath + "/v1/dialogs", formData).Result; 
       var result = response.Content.ReadAsStringAsync().Result; 
       if (!response.IsSuccessStatusCode) 
       { 
        var contentResult = new ContentResult 
        { 
         ContentType = "application/json", 
         Content = response.ReasonPhrase 
        }; 
        return contentResult; 
       } 

       var successResult = new ContentResult 
       { 
        ContentType = "application/json", 
        Content = result 
       }; 

       return successResult; 
      } 
     } 
     catch (Exception ex) 
     { 
      HandleError(ex); 
      var contentResult = new ContentResult 
      { 
       ContentType = "application/json", 
       Content = "false" 
      }; 
      return contentResult; 
     } 
    }