web-dev-qa-db-ja.com

API管理URLに不足しているサブスクリプションキーの問題があります

私はAPI管理の初心者です。基本的なWEB APIを作成し、API APP(アプリサービス)にホストしました。 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-> fiddlerにサブスクリプションキーを追加して、別の問題が発生することを試みました。ただし、URLにアクセスするには、基本的にサブスクリプションキーは必要ありません。

9
lokanath das

製品設定のサブスクリプションを要求するオプションを有効にした場合、以下のヘッダーを渡す必要がありますOcp-Apim-Subscription-Key。サブスクリプションキーを提供する場合でも、キーはAPIに含まれる製品に属している必要があります。購読オプションが必要ない場合は、製品設定で無効にします。

7
VinuBibin

製品設定のサブスクリプションを要求するオプションを有効にした場合、以下のヘッダーOcp-Apim-Subscription-Keyを渡す必要があります。サブスクリプションキーを提供する場合でも、キーはAPIに含まれる製品に属している必要があります。 APIを製品に追加します。

  1. Azureポータルから[製品]メニュー/リンクを選択します。
  2. リストから製品を選択します。
  3. 選択した製品オプションからAPIを選択します。
  4. [追加]ボタンをクリックしてリストからAPIを選択し、[選択]をクリックします。

Postmanまたはコードを使用してAPIを使用することをお勧めします。ヘッダーキー(Ocp-Apim-Subscription-Key)でサブスクリプションキーを渡す必要があります。

プロファイル画面のAPI開発者ポータルでサブスクリプションキー(プライマリ/セカンダリ)を見つけることができます。

3
RaviK

リクエストヘッダーでサブスクリプションキーを渡す必要があります。

これを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;
            }
0
Kurkula