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 gelen API çağrısı, Unknown Error hatasıyla veya Bu API'yi deneyin panelinde boş bir yanıtla başarısız olur.

Hata mesajları

Entegre portalda API istekleri için boş bir yanıt veya aşağıdaki hata mesajını görebilirsiniz:

Unknown Error

Geliştirici Araçları > Konsol sekmesinde aşağıdaki 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 bir hata mesajı aşağıdaki gibidir:

genel hata mesajı, resmi büyütmek için tıklayın genel hata mesajı

Olası nedenler

Neden Açıklama Şunun 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 Herkese Açık Bulut kullanıcıları
Access-Control-Allow-Origin için Birden Fazla Değer İleti Politikası Atayın bölümünde Ayarla yerine Ekle seçeneğini kullanma. Edge Herkese Açık Bulut kullanıcıları

Neden: İşlenmemiş politika hatası

Teşhis

  1. Sorunun yalnızca 2XX dışında bir yanıt beklendiğinde oluştuğunu doğrulayın.
  2. Başarısız istekler için proxy akışında politikalar bulunduğunu doğrulayın.
  3. İsteği izleyin ve continueOnError="false" içeren bir politikanın başarısız olup olmadığını ve hata verip vermediğini kontrol edin.
    1. Yanıtınız evet ise assignMessage CORS politikasının hata yanıtı akışında yürütülüp yürütülmediğini doğrulayın.
    2. Aksi halde, sorunun nedeni budur.
      Bunun nedeni, continueOnError="false" öğesine sahip herhangi bir politikanın başarısız olması durumunda isteğin hata yanıtı akışına girmesidir. Hata yanıtı akışında açık bir hata işleme yoksa politikaya karşılık gelen varsayılan hata yanıtı geri gönderilir. Bu hata yanıtının CORS başlığı yok. Sonuç olarak, entegre geliştirici portalından gelen API çağrısı Unknown error hatasıyla 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 portaldaki Bu API'yi deneyin panelinde ve proxy İzleme penceresindeki örnek hata mesajı:

örnek hata mesajı, resmi büyütmek için tıklayın örnek hata mesajı

Entegre portaldaki Bu API'yi deneyin panelinde ve proxy Trace penceresindeki örnek başarı mesajı:

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

Çözünürlük

  1. Hata yanıtını işlemek için varsayılan hata mesajını kullanmak yerine hata kuralı uygulanmalıdır. Uygun başlıklara sahip bir assignMessage CORS politikası ekleyin ve bunu FaultRule'da çağırın.
  2. Bazı durumlarda her hata için bir hata kuralının tanımlanması uygun olmayabilir. Bu nedenle, AtaMessage 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 üst bilgisinin değerini kontrol edin.
  2. Access-Control-Allow-Origin üstbilgisi, 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. İzlemedeki Access-Control-Allow-Origin üst bilgisinin değeri
    *,*
    şöyle görünüyorsa:Bu, hem hedef sunucunun hem de AttributionMessage CORS politikasının değerini ayarladığı anlamına gelir.
  4. Kullanıcı bir politikada Access-Control-Allow-Origin için <Add> element seçeneğini kullandığında veya arka ucun kendisi birden fazla değer ayarladığında bu durum meydana gelebilir.

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

örnek birden fazla değer kullanıldı, büyütmek için tıklayın örnek olarak birden fazla değer kullanılmış

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

tek bir değer örneği kullanıldı, resmi büyütmek için tıklayın örnek tek değer kullanıldı

<Add> kullanan örnek:

Ekle seçeneğini kullanan bir örnek: büyütmek için tıklayın Ekle seçeneğini kullanma örneği

<Set> kullanan örnek:

Ayarla özelliğinin kullanıldığı bir örnek: Büyük resmi görmek için tıklayın Setin kullanıldığı örnek

Çözünürlük

  1. Önerilen yaklaşım, yalnızca tek bir değere izin verildiğinden Access-Control-Allow-Origin için <Set> element ( <Add> element yerine) kullanılmasıdır.
  2. Alternatif olarak, Access-Control-Allow-Origin başlığını yalnızca tek bir yere ( assignMessage CORS politikası veya hedef sunucu) ayarlayın.
<?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 Desteği'nden hâlâ yardıma ihtiyacınız varsa Teşhis bilgilerini toplamanız gerekiyor bölümünü inceleyin.

Teşhis bilgileri toplanmalı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 adı
  • Hatayı yeniden oluşturmak için kullanılan tam curl komutu
  • API istekleri için izleme dosyası
  • Yükün boyutuyla birlikte hedef/arka uç sunucusundan alınan yanıtın tam çıktısı