Ошибка отправки HTTP-запроса в C # - PullRequest
0 голосов
/ 27 апреля 2018

Я использую следующий URL в моем Chrome, и он отлично работает: https://westus.api.cognitive.microsoft.com/luis/v2.0/apps/62bea90c-9b0c-487b-8416-1a4d94772f99?subscription-key=29317e2237fb4b43a91959cadee6f143&staging=true&verbose=true&timezoneOffset=480&q=哪个国家获得2010年世界杯第一名

возвращает строку json, как показано ниже:

{
  "query": "哪个国家获得2010年世界杯第一名",
  "topScoringIntent": {
    "intent": "Query",
    "score": 0.9818858
  },
  "intents": [
    {
      "intent": "Query",
      "score": 0.9818858
    },
    {
      "intent": "None",
      "score": 0.01755463
    }
  ],
  "entities": [
    {
      "entity": "2010年",
      "type": "builtin.datetimeV2.daterange",
      "startIndex": 6,
      "endIndex": 10,
      "resolution": {
        "values": [
          {
            "timex": "2010",
            "type": "daterange",
            "start": "2010-01-01",
            "end": "2011-01-01"
          }
        ]
      }
    },
    {
      "entity": "2010",
      "type": "builtin.number",
      "startIndex": 6,
      "endIndex": 9,
      "resolution": {
        "value": "2010"
      }
    },
    {
      "entity": "一",
      "type": "builtin.number",
      "startIndex": 15,
      "endIndex": 15,
      "resolution": {
        "value": "1"
      }
    }
  ]
}

но когда я отправляю URL в c #, см. Ниже:

    private void button1_Click(object sender, EventArgs e)
    {
        string uri = txtURL.Text;
        if (uri == null)
        {
            uri = @"https://westus.api.cognitive.microsoft.com/luis/v2.0/apps/62bea90c-9b0c-487b-8416-1a4d94772f99?subscription-key=29317e2237fb4b43a91959cadee6f143&staging=true&verbose=true&timezoneOffset=480&q=哪个国家获得2010年世界杯第一名";
        }
        var json_contents = new WebClient().DownloadString(uri); //exception thrown from this line
        txtJson.Text = json_contents;
    }

Я получил сообщение об ошибке:

'The path is not of a legal form.'

Может кто-нибудь сказать мне причину и как исправить эту проблему в моем коде C #

Ответы [ 2 ]

0 голосов
/ 27 апреля 2018

Вы можете использовать библиотеку HttpWebRequest из System.Net

, который может обрабатывать этот код, если вам нужен формат json для этой возвращаемой строки, есть библиотека для преобразования json, с помощью которой вы можете преобразовать вашу строку данных в json.

private void button1_Click(object sender, EventArgs e)
    {
        string json = string.Empty;
        string url = @"https://westus.api.cognitive.microsoft.com/luis/v2.0/apps/62bea90c-9b0c-487b-8416-1a4d94772f99?subscription-key=29317e2237fb4b43a91959cadee6f143&staging=true&verbose=true&timezoneOffset=480&q=哪个国家获得2010年世界杯第一名";

        HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
        request.AutomaticDecompression = DecompressionMethods.GZip;

        using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
        using (Stream stream = response.GetResponseStream())
        using (StreamReader reader = new StreamReader(stream))
        {
            json = reader.ReadToEnd();
        }

        richTextBox1.Text = json;
    }

С его помощью вы получите ответ.

0 голосов
/ 27 апреля 2018

Вам необходимо кодировать URL-адрес перед выполнением вызова, поскольку он содержит не-Ascii символы.

Вы можете использовать HttpUtility.UrlEncode или вы можете сделать вручную и ссылаться на ссылку

https://stackoverflow.com/a/8248262/6671466

Может быть, это поможет

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...