URL-адрес управления API сообщает об отсутствии ключа подписки.

Я новичок в управлении API. Я создал базовый веб-API и размещен в приложении API (служба приложений). URL работает должным образом и возвращает данные. т.е. http://xyz.azurewebsites.net/api/webapi

Но когда я добавляю приложение API в управление API, я получаю другой URL-адрес с дополнительным суффиксом, который я добавляю, но когда я пытаюсь открыть ссылку в браузере -> https://abc.azure-api.net/God, я получаю следующую ошибку

{ "statusCode": 401, "message": "Access denied due to missing subscription key. Make sure to include subscription key when making requests to an API." }

Если с API APP проблем нет, то не с управлением API. Пожалуйста, помогите мне, если что-то мне не хватает.

NB -> Я попытался добавить ключ подписки в скрипач, возникла другая проблема. но для доступа к URL-адресу в принципе не требуется ключ подписки.


person lokanath das    schedule 25.07.2018    source источник


Ответы (3)


Если вы включили параметр Требовать подписку для настроек продукта, вы должны передать указанный ниже заголовок Ocp-Apim-Subscription-Key. Даже если вы предоставляете ключ подписки, ключ должен принадлежать продукту, который включает API. Если вам не нужна подписка, отключите ее в настройках продукта.

person VinuBibin    schedule 25.07.2018
comment
Но хотя я предоставил правильную подписку из продукта Unlimted (поскольку я создал API как Unlimited), у меня все равно возникала та же проблема. Удаление Option - это решение, но как с этим бороться в реальном приложении? - person lokanath das; 25.07.2018
comment
Вы должны предоставить ключ подписки для вашего API. это мера аутентификации. Какую ошибку вы получаете при предоставлении ключа подписки - person VinuBibin; 25.07.2018
comment
{statusCode: 401, сообщение: Доступ запрещен из-за отсутствия ключа подписки. Не забудьте указать ключ подписки при выполнении запросов к API. } Эта ошибка возникает, когда я пытаюсь открыть в браузере. - person lokanath das; 26.07.2018
comment
когда вы открываете в браузере напрямую, у вас нет возможности добавить заголовок. Отсюда возникает ошибка. если вы добавите заголовок и вызовите почтальона, это будет отлично работать! - person VinuBibin; 26.07.2018
comment
проверьте эту ссылку, если вы хотите передавать заголовки при открытии в браузере stackoverflow.com/questions/19021226/ - person VinuBibin; 26.07.2018

Если вы включили опцию Требовать подписку в настройках продукта, вы должны передать указанный ниже заголовок Ocp-Apim-Subscription-Key. Даже если вы предоставляете ключ подписки, ключ должен принадлежать продукту, который включает API. Добавьте свои API в свои продукты.

  1. Выберите меню / ссылку «Продукты» на портале Azure.
  2. Выберите продукт из списка.
  3. Выберите API из выбранных вариантов продукта.
  4. Нажмите кнопку «Добавить», выберите свой API из списка и нажмите «Выбрать».

Вы можете использовать свой API с помощью Postman или своего кода. Вы должны передать ключ подписки в ключе заголовка (Ocp-Apim-Subscription-Key).

Вы можете найти ключ подписки (первичный / вторичный) на портале разработчика API на экране профиля.

person RaviK    schedule 02.01.2019

Вы должны передать ключ подписки в заголовках запросов.

Добавьте это в свой код C #

HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
request.Headers.Add("Authorization", BearerToken);

 request.Headers.Add("Ocp-Apim-Subscription-Key", config["OcpApimSubscriptionKey"]);

Добавьте это в файл настроек вашего приложения

"OcpApimSubscriptionKey": "your key",

Образец кода:

 try
            {

                using (HttpClient client = new HttpClient())
                {
                    client.BaseAddress = new Uri(url);
                    client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
                    client.DefaultRequestHeaders.Add("Authorization", BearerToken);
                    client.DefaultRequestHeaders.Add("Ocp-Apim-Subscription-Key", config["OcpApimSubscriptionKey"]);
                    HttpResponseMessage response = client.GetAsync(url).Result;
                    if (response.IsSuccessStatusCode)
                    {
                        return response.Content.ReadAsStringAsync().Result;
                    }
                    else
                    {
                        var ResponseResult = await response.Content.ReadAsStringAsync();
                        return ResponseResult;
                    }
                }
            }

            catch (WebException ex)
            {
                WebResponse errorResponse = ex.Response;
                using (Stream responseStream = errorResponse.GetResponseStream())
                {
                    StreamReader reader = new StreamReader(responseStream, System.Text.Encoding.GetEncoding("utf-8"));
                    string errorText = reader.ReadToEnd();
                }
                throw;
            }
            catch (ArgumentNullException ex)
            {
                throw;
            }
            catch (InvalidOperationException ex)
            {
                throw;
            }
            catch (HttpRequestException ex)
            {
                throw;
            }
person Kurkula    schedule 08.06.2019