Başlıkta olduğu gibi dışarıdan(farklı ip) Asmx servis’e erişmek istediğimizde yaşanan bu sorunu aşmak için sizlere çağre olacak 2-3 yöntemi sizlerle makalenin devamında paylaştım.
Phonegap-Asmx Servic Access-Control-Allow-Origin Problemi
Bu sorunu aşmak için Asmx servis tarafında yapmanız gereken Web.config adlı dosyayı açıp configuration etiketi içerisine alttaki etiketleri uygun şekilde ekleyiniz.
1 2 3 4 5 6 7 8 | <system.web> <webServices> <protocols> <add name="HttpGet"/> <add name="HttpPost"/> </protocols> </webServices> </system.web> |
Üstte yer alan xml kodlarının amacı servise Get ve Post ile yapılan isteklere cevap verilmesi için izin veriliyor.
Ardından alttaki yer alan kodlarıda ekleyerek Access-Control-Allow-Origin ve Access-Control-ContentType hatalarına karşı çözüm için kullanabilirsiniz. üstteki xml kodunda olduğu gibi configuration etiketleri arasına alttaki kodu yapıştırınız.
1 2 3 4 5 6 7 8 | <system.webServer> <httpProtocol> <customHeaders> <add name="Access-Control-Allow-Origin" value="*" /> <add name="Access-Control-Allow-Headers" value="Origin, X-Requested-With, Content-Type, Accept" /> </customHeaders> </httpProtocol> </system.webServer> |
Son olarak eğer hatayı phonegap’de oluşturduğunuz plugin’lere ulaşırken alıyorsanız o zaman yapmanız gereken Phonegap Activitesi içerisine alttaki kodları eklemek sorununuzu çözecektir.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | @TargetApi(16) protected void fixJellyBeanIssues() { System.out.println(super.appView.toString()); try { super.appView.getSettings().setAllowUniversalAccessFromFileURLs(true); } catch(NullPointerException e) { System.out.println(e.toString()); } } @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); super.init(); super.clearCache(); if(android.os.Build.VERSION.SDK_INT > android.os.Build.VERSION_CODES.ICE_CREAM_SANDWICH_MR1) { fixJellyBeanIssues(); } super.loadUrl("file:///android_asset/www/index.html"); } |