API Management ilkelerinde hata işleme

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.

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:

Bir hata iletisi içeren örne verilen yanıtı gösteren ekran görüntüsü.

İlkelerle çalışma hakkında daha fazla bilgi için bkz: