私は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にアクセスするには、基本的にサブスクリプションキーは必要ありません。
製品設定のサブスクリプションを要求するオプションを有効にした場合、以下のヘッダーを渡す必要がありますOcp-Apim-Subscription-Key
。サブスクリプションキーを提供する場合でも、キーはAPIに含まれる製品に属している必要があります。購読オプションが必要ない場合は、製品設定で無効にします。
製品設定のサブスクリプションを要求するオプションを有効にした場合、以下のヘッダーOcp-Apim-Subscription-Keyを渡す必要があります。サブスクリプションキーを提供する場合でも、キーはAPIに含まれる製品に属している必要があります。 APIを製品に追加します。
Postmanまたはコードを使用してAPIを使用することをお勧めします。ヘッダーキー(Ocp-Apim-Subscription-Key)でサブスクリプションキーを渡す必要があります。
プロファイル画面のAPI開発者ポータルでサブスクリプションキー(プライマリ/セカンダリ)を見つけることができます。
リクエストヘッダーでサブスクリプションキーを渡す必要があります。
これを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;
}