Вызов RestSharp Azure Web API завершается неудачно при добавлении дополнительных параметров - PullRequest
0 голосов
/ 08 мая 2019

Я пытаюсь вызвать API Azure Computer Vision, а именно файл пакетного чтения [POST], используя RestSharp. Все работает нормально в коде ниже:

private void MakeBatchReadRequest(string imageFilePath)
{
    try
    {
        RestClient client = new RestClient("https://southeastasia.api.cognitive.microsoft.com/");
        client.AddDefaultHeader("Ocp-Apim-Subscription-Key", subscriptionKey);
        RestRequest request = new RestRequest("vision/v2.0/read/core/asyncBatchAnalyze", Method.POST);
        request.AddHeader("Content-Type", "application/octet-stream");

        byte[] byteData = GetImageAsByteArray(imageFilePath);
        request.AddParameter("application/octet-stream", byteData, ParameterType.RequestBody);

        RestResponse response = client.Execute(request);
        operationLocation = response.Headers.Where(x => x.Name == "Operation-Location").First.Value;
    }
    catch (Exception ex)
    {
        MessageBox.Show(ex.Message);
    }
}

Мне не нужно было включать параметр mode, поскольку в соответствии с документацией API, видимой здесь , это было необязательно, и значением по умолчанию было Printed, которое было тем, что я уже хотел. Однако, если я добавлю параметр mode (на всякий случай я передумал и переключусь на что-то другое) в запросе, как показано ниже:

private void MakeBatchReadRequest(string imageFilePath)
{
    try
    {
        RestClient client = new RestClient("https://southeastasia.api.cognitive.microsoft.com/");
        client.AddDefaultHeader("Ocp-Apim-Subscription-Key", subscriptionKey);
        RestRequest request = new RestRequest("vision/v2.0/read/core/asyncBatchAnalyze", Method.POST);
        request.AddHeader("Content-Type", "application/octet-stream");

        byte[] byteData = GetImageAsByteArray(imageFilePath);
        request.AddParameter("application/octet-stream", byteData, ParameterType.RequestBody);

        request.AddParameter("mode", "Printed") // This will cause the web API to return an error response.

        RestResponse response = client.Execute(request);
        operationLocation = response.Headers.Where(x => x.Name == "Operation-Location").First.Value;
    }
    catch (Exception ex)
    {
        MessageBox.Show(ex.Message);
    }
}

API возвращает код состояния ответа 415 и описание статуса Unsupported Media Type. Весь ответ JSON ниже:

{
    "error": {
        "code": "BadArgument",
        "message": "Unsupported media type."
    }
}

Я не совсем уверен, как добавление простого параметра в запрос может вызвать ошибку API. Кроме того, я не уверен, почему ответ об ошибке Unsupported Media Type, так как я использую файл изображения JPG, который поддерживается и устанавливаю его тип содержимого как application/octet-stream в запросе.

Любая помощь будет принята с благодарностью.

1 Ответ

0 голосов
/ 09 мая 2019

Я обновился до .Net Framework версии 4.6.1 и RestSharp версии 106.6.9, и теперь он работает нормально.Думаю, у меня нет выбора, кроме как обновить версию моего приложения .Net Framework, чтобы я мог использовать более новую и менее глючную версию RestSharp.

...