Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
UYGULANANLAR: Tüm API Management katmanları
ProxyError nesnesi sağlayarak, Azure API Management yayımcıların isteklerin işlenmesi sırasında oluşabilecek hata koşullarına yanıt vermesine olanak tanır.
ProxyError nesnesine context.LastError özelliği aracılığıyla erişilir. İlkeler on-error bölümü, ProxyError nesnesini kullanabilir. Bu makalede Azure API Management'taki hata işleme özellikleri için bir başvuru sağlanır.
API Management'ta hata işleme
Azure API Management'taki ilkeler, aşağıdaki örnekte gösterildiği gibi , inbound, backendve outbound bölümlerine ayrılmıştıron-error.
<policies>
<inbound>
<!-- statements to be applied to the request go here -->
</inbound>
<backend>
<!-- statements to be applied before the request is
forwarded to the backend service go here -->
</backend>
<outbound>
<!-- statements to be applied to the response go here -->
</outbound>
<on-error>
<!-- statements to be applied if there is an error
condition go here -->
</on-error>
</policies>
Bir isteğin işlenmesi sırasında, yerleşik adımlar isteğin kapsamındaki tüm ilkelerle birlikte çalışır. Bir hata oluşursa, işleme hemen ilke bölümüne atlar on-error .
İlke on-error bölümü herhangi bir kapsamda kullanılabilir. API yayımcıları, hatayı Azure Event Hubs'a kaydetmek veya çağırana dönecek yeni bir yanıt oluşturmak gibi özel davranışlar yapılandırabilir.
Not
İlkelerde on-error bölümü varsayılan olarak mevcut değildir. İlkeye on-error bölümünü eklemek için ilke düzenleyicisinde istediğiniz ilkeyi bulun ve ekleyin. Daha fazla bilgi için API Yönetiminde İlkeler kısmına bakın.
Bölüm yoksa on-error , bir hata koşulu oluşursa arayanlar 400 veya 500 HTTP yanıt iletisi alır.
Hata durumunda izin verilen politikalar
Aşağıdaki politikalar on-error politika bölümünde kullanılabilir.
- seçmek
- set-variable
- bul ve değiştir
- return-response
- başlık-ayarla
- set-method
- set-status
- istek gönder
- tek-yönlü-talep-gönder
- Event Hub'a kaydet
- json-to-xml
- xml-to-json
- sınır eşzamanlılığı
- sahte yanıt
- Yeni -den deneme
- izleme
Son Hata
Bir hata oluştuğunda ve denetim on-error ilke bölümüne atladığında, hata context.LastError özelliğinde depolanır.
on-error bölümündeki ilkeler context.LastError'e erişebilir.
LastError aşağıdaki özelliklere sahiptir.
| Adı | Tür | Açıklama | Gerekli |
|---|---|---|---|
Source |
Dize | Hatanın oluştuğu öğenin adı. İlke veya yerleşik işlem hattı adımı adı olabilir. | Evet |
Reason |
Dize | Hata işlemede kullanılabilecek makine dostu hata kodu. | Hayır |
Message |
Dize | İnsan tarafından okunabilen hata açıklaması. | Evet |
Scope |
Dize | Hatanın oluştuğu kapsamın adı. | Hayır |
Section |
Dize | Hatanın oluştuğu bölüm adı. Olası değerler: inbound, backend, outboundveya on-error. |
Hayır |
Path |
Dize | İç içe ilke hiyerarşisini belirtir, örneğin choose[3]\\when[2]. İç içe geçmiş bir ilkenin birden çok örneği 1'den başlayarak indekslenir. |
Hayır |
PolicyId |
Dize | Politikada hatanın meydana geldiği durumda, müşteri tarafından belirtilmişse, id özniteliğinin değeri. |
Hayır |
İpucu
Durum koduna aracılığıyla context.Response.StatusCodeerişebilirsiniz.
Not
Tüm ilkelerin, ilkenin kök öğesine eklenebilen isteğe bağlı id bir özniteliği vardır. Bir hata koşulu oluştuğunda bu öznitelik bir ilkede mevcutsa, özelliğini kullanarak context.LastError.PolicyId özniteliğin değerini alabilirsiniz.
Yerleşik adımlar için önceden tanımlanmış hatalar
Aşağıdaki hatalar, yerleşik işleme adımlarının değerlendirilmesi sırasında oluşabilecek hata koşulları için önceden tanımlanmıştır.
| Kaynak | Koşul | Nedeni | İleti |
|---|---|---|---|
| yapılandırma | URI herhangi bir API veya İşlemle eşleşmiyor | İşlemBulunamadı | Gelen istek bir işlemle eşleştirilemiyor. |
| yetkilendirme | Abonelik anahtarı sağlanmadı | AbonelikAnahtarıBulunamadı | Eksik abonelik anahtarı nedeniyle erişim reddedildi. Bu API'ye istekte bulunurken abonelik anahtarını eklediğinizden emin olun. |
| yetkilendirme | Abonelik anahtarı değeri geçersiz | SubscriptionKeyInvalid | Geçersiz abonelik anahtarı nedeniyle erişim reddedildi. Etkin abonelik için geçerli bir anahtar sağladığıdan emin olun. |
| birden çok | İstemci, istek beklemedeyken aşağı akıştaki bağlantıyı (istemciden API Management ağ geçidine) iptal etti. | İstemci Bağlantı Hatası | birden çok |
| birden çok | Arka uç kesildi veya yukarı yönlü bağlantı kuramadı (API Yönetim ağ geçidinden arka uç hizmetine) | Arka Uç Bağlantı Hatası | birden çok |
| birden çok | Belirli bir ifadenin değerlendirilmesi sırasında çalışma zamanı istisnası oluştu. | İfade Değeri Değerlendirme Başarısızlığı | birden çok |
İlkeler için önceden tanımlanmış hatalar
İlke değerlendirmesi sırasında oluşabilecek hata koşulları için aşağıdaki hatalar önceden tanımlanmıştır.
| Kaynak | Koşul | Nedeni | İleti |
|---|---|---|---|
| hız sınırı | Hız sınırı aşıldı | Oran Limiti Aşıldı | Hız sınırı aşıldı |
| kota | Kota aşıldı | Kota Aşıldı | Çağrı hacmi kotası kalmadı. Kota xx:xx:xx içinde yenilenecek. -veya- Bant genişliği kotası yetersiz. Kota xx:xx:xx içinde yenilenecek. |
| jsonp | Geri çağırma parametresi değeri geçersiz (yanlış karakterler içeriyor) | Geri Arama Parametresi Geçersiz | {callback-parameter-name} geri çağırma parametresinin değeri geçerli bir JavaScript tanımlayıcısı değil. |
| IP filtresi | Çağrı yapan IP istekten ayrıştırılamadı. | Çağrı Yapanın IP'si Ayrıştırılamadı | Arayan için IP adresi oluşturulamadı. Erişim reddedildi. |
| IP filtresi | Arayan IP'leri izin verilenler listesinde değil | Çağrıcı IP'sine İzin Verilmiyor | Arayan IP adresine {ip-address} izin verilmiyor. Erişim reddedildi. |
| IP filtresi | Arayan IP'leri engellenenler listesinde | Çağıranın IP'si Engellendi | Arayan IP adresi engellendi. Erişim reddedildi. |
| başlığı kontrol et | Gerekli üst bilgi gösterilmedi veya değer eksik | Başlık Bulunamadı | İstekte {header-name} üst bilgisi bulunamadı. Erişim reddedildi. |
| başlığı kontrol et | Gerekli üst bilgi gösterilmedi veya değer eksik | BaşlıkDeğeriYasak | {header-name} başlığı altında {header-value} değeri izin verilmemektedir. Erişim reddedildi. |
| jwt'yi doğrula | JSON Web Belirteci (JWT) istekte eksik | BelirteçBulunamadı | JWT yok. |
| jwt'yi doğrula | İmza doğrulaması başarısız oldu | Jeton İmzası Geçersiz | <jwt kitaplığından gelen mesaj>. Erişim reddedildi. |
| jwt'yi doğrula | Geçersiz hedef kitle | Jeton İzleyicisi İzin Verilmiyor | <jwt kitaplığından gelen mesaj>. Erişim reddedildi. |
| jwt'yi doğrula | Geçersiz sağlayıcı | JetonVericiİzinVerilmedi | <jwt kitaplığından gelen mesaj>. Erişim reddedildi. |
| jwt'yi doğrula | Belirtecin süresi doldu | Jeton Süresi Doldu | <jwt kitaplığından gelen mesaj>. Erişim reddedildi. |
| jwt'yi doğrula | İmza anahtarı kimlikle çözümlenmedi | Jeton İmza Anahtarı Bulunamadı | <jwt kitaplığından gelen mesaj>. Erişim reddedildi. |
| jwt'yi doğrula | Belirteçte gerekli iddialar eksik | JetonTalebiBulunamadı | JWT'de şu talepler eksik: <c1>, <c2>, ... Erişim reddedildi. |
| jwt'yi doğrula | İstem değerleri uyumsuzluğu | JetonTalepDeğeriİzinVerilmez | {claim-name} talebi için {claim-value} değeri izin verilmiyor. Erişim reddedildi. |
| jwt'yi doğrula | Diğer doğrulama hataları | JWT Geçersiz | <jwt kütüphanesinden gelen mesaj> |
| yönlendirme isteği veya gönderi isteği | Http yanıt durum kodu ve üst bilgileri, yapılandırılan zaman aşımı içinde arka uçtan alınmadı | Zaman Aşımı | birden çok |
Örnek
BIR API ilkesini aşağıdaki değere ayarlayın:
<policies>
<inbound>
<base />
</inbound>
<backend>
<base />
</backend>
<outbound>
<base />
</outbound>
<on-error>
<set-header name="ErrorSource" exists-action="override">
<value>@(context.LastError.Source)</value>
</set-header>
<set-header name="ErrorReason" exists-action="override">
<value>@(context.LastError.Reason)</value>
</set-header>
<set-header name="ErrorMessage" exists-action="override">
<value>@(context.LastError.Message)</value>
</set-header>
<set-header name="ErrorScope" exists-action="override">
<value>@(context.LastError.Scope)</value>
</set-header>
<set-header name="ErrorSection" exists-action="override">
<value>@(context.LastError.Section)</value>
</set-header>
<set-header name="ErrorPath" exists-action="override">
<value>@(context.LastError.Path)</value>
</set-header>
<set-header name="ErrorPolicyId" exists-action="override">
<value>@(context.LastError.PolicyId)</value>
</set-header>
<set-header name="ErrorStatusCode" exists-action="override">
<value>@(context.Response.StatusCode.ToString())</value>
</set-header>
<base />
</on-error>
</policies>
Yetkisiz istek göndermek aşağıdaki yanıtla sonuçlanmıştır:
İlgili içerik
İlkelerle çalışma hakkında daha fazla bilgi için bkz:
- Öğretici: API'nizi dönüştürme ve koruma
- İlke ifadeleri ve ayarlarının tam listesi için Politika Referansı
- Politika ifadeleri
- Politikaları ayarlama veya düzenleme
- Politika yapılandırmalarını tekrar kullanma
- Politika kod parçacıkları deposu
- Politika örnekleri deposu
- Azure API Management politika araç seti
- Politikalar oluşturmak, açıklamak ve sorun gidermek için Copilot yardımı alın