Bu API'yi deneyin panelinde bilinmeyen hata

Apigee Edge belgelerini görüntülüyorsunuz.
Apigee X belgelerine gidin.
bilgi

Belirti

Entegre geliştirici portalından yapılan API çağrısı, Unknown Error ile başarısız oluyor veya Try this API (Bu API'yi deneyin) panelinde boş bir yanıt veriliyor.

Hata mesajları

Entegre portalda API istekleriyle ilgili olarak boş bir yanıt veya aşağıdaki hata mesajını görebilirsiniz:

Unknown Error

Geliştirici Araçları > Konsol sekmesinde şu hatayı görürsünüz:

Access to XMLHTTPRequest at 'API_URL' from origin 'URL_of_Integrated_DevPortal'
has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is
present on the requested resource.

Geliştirici Araçları > Konsol sekmesinde görülen genel hata mesajı şöyledir:

genel hata mesajı, daha büyük resim için tıklayın genel hata mesajı

Olası nedenler

Neden Açıklama Aşağıdaki ürünler için geçerli sorun giderme talimatları
İşlenmemiş politika hatası API isteğinin çalışma zamanı akışında herhangi bir politika başarısız olduğunda varsayılan hata yanıtı, CORS başlıkları olmadan gönderilir. Edge Public Cloud kullanıcıları
Access-Control-Allow-Origin için Birden Fazla Değer İleti politikası atarken Set yerine Add kullanma. Edge Public Cloud kullanıcıları

Neden: İşlenmemiş politika hatası

Teşhis

  1. Sorunun yalnızca 2XX olmayan bir yanıt beklendiğinde oluştuğunu doğrulayın.
  2. Başarısız olan istekler için proxy akışında politikalar olduğunu doğrulayın.
  3. İsteği izleyin ve continueOnError="false" ile ilgili bir politikanın başarısız olup hata verip vermediğini kontrol edin.
    1. Evetse hata yanıtı akışında AssignMessage CORS politikasının yürütülüp yürütülmediğini doğrulayın.
    2. Değilse bu sorunun nedeni budur.
      Bunun nedeni, continueOnError="false" öğesini içeren herhangi bir politika başarısız olduğunda isteğin hata yanıtı akışına girmesidir. Hata yanıtı akışında açık bir hata yönetimi yoksa politikaya karşılık gelen varsayılan hata yanıtı geri gönderilir. Bu hata yanıtında CORS başlığı yok. Sonuç olarak, entegre geliştirici portalından yapılan API çağrısı Unknown error ile başarısız olur.

Aşağıdaki ekran görüntülerinde örnek bir hata mesajı ve örnek bir başarı mesajı gösterilmektedir.

Entegre portalın Try this API (Bu API'yi deneyin) panelindeki ve proxy'nin Trace (İzleme) penceresindeki örnek hata mesajı:

örnek hata mesajı, daha büyük resim için tıklayın örnek hata mesajı

Entegre portal Try this API panelindeki ve proxy Trace penceresindeki örnek başarı mesajı:

Başarı mesajı örneği, daha büyük resim için tıklayın örnek başarı mesajı

Çözünürlük

  1. Varsayılan hata mesajına güvenmek yerine, hata yanıtını işlemek için bir hata kuralı uygulanmalıdır. Uygun başlıkları içeren bir AssignMessage CORS politikası ekleyin ve bunu FaultRule'da çağırın.
  2. Bazen her hata için bir hata kuralı tanımlamak mümkün olmayabilir. Bu nedenle, AssignMessage CORS politikasını yürütmek için varsayılan bir hata kuralı uygulanabilir:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ProxyEndpoint name="proxy-endpoint-name">
    <Description/>
    <!-- Add a default fault rule to add CORS -->
    <DefaultFaultRule name="fault-rule">
        <Step>
            <Name>add-cors</Name>
        </Step>
    </DefaultFaultRule>
    <FaultRules/>
    <!--
    <Flows />
    Rest of the proxy definition
    -->
</ProxyEndpoint>

Neden: Access-Control-Allow-Origin için birden fazla değer

Teşhis

  1. İzleme oturumunda Access-Control-Allow-Origin başlığının değerini kontrol edin.
  2. Access-Control-Allow-Origin başlığı yalnızca tek bir değerin ayarlanmasına izin verir. Birden fazla değer ayarlamak CORS sorununa neden olabilir ve geliştirici portalı yanıtları oluşturamaz.
  3. İzleme işlemindeki Access-Control-Allow-Origin başlığının değeri şu şekilde görünüyorsa:
    *,*
    bu, hem hedef sunucunun hem de AssignMessage CORS politikasının değerini ayarladığı anlamına gelir.
  4. Bu durum, bir kullanıcı politikada Access-Control-Allow-Origin için <Add> element kullandığında veya arka uç kendisi birden fazla değer ayarladığında meydana gelebilir.

*,* değerine eşit olan Access-Control-Allow-Origin örneği:

Birden fazla değerin kullanıldığı örnek. Daha büyük resim için tıklayın. kullanılan birden çok değere örnek

* değerine eşit olan Access-Control-Allow-Origin örneği:

Kullanılan tek değer örneği, daha büyük resim için tıklayın kullanılan tek değer örneği

<Add> kullanılarak oluşturulan örnek:

Ekleme işleminin kullanıldığı örnek. Daha büyük resim için tıklayın. örnek Using Add

<Set> kullanılarak oluşturulan örnek:

Set işlevinin kullanıldığı örnek, daha büyük resim için tıklayın Set işlevinin kullanıldığı örnek

Çözünürlük

  1. Yalnızca tek bir değere izin verildiğinden Access-Control-Allow-Origin için <Add> element yerine <Set> element kullanılması önerilir.
  2. Alternatif olarak, Access-Control-Allow-Origin üst bilgisini yalnızca tek bir yerde ayarlayın: AssignMessage CORS politikası veya hedef sunucu.
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<AssignMessage async="false" continueOnError="false" enabled="true" name="set-cors">
    <DisplayName>Set CORS</DisplayName>
    <FaultRules/>
    <Properties/>
    <Set>
        <Headers>
            <Header name="Access-Control-Allow-Origin">*</Header>
        </Headers>
    </Set>
    <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
    <AssignTo createNew="false" transport="http" type="response"/>
</AssignMessage>

Apigee Destek Ekibi'nden hâlâ yardıma ihtiyacınız varsa Toplanması gereken teşhis bilgileri başlıklı makaleyi inceleyin.

Teşhis bilgilerini toplamalıdır

Aşağıdaki teşhis bilgilerini toplayın ve ardından Apigee Edge Destek Ekibi ile iletişime geçin:

  • Kuruluş adı
  • Ortam adı
  • API proxy'si adı
  • Hatayı yeniden oluşturmak için kullanılan tam curl komutu
  • API istekleri için izleme dosyası
  • Hedef/arka uç sunucudan gelen yanıtın tam çıktısı ve yükün boyutu