Merhaba, localhostta çalışan bir backendin göndermiş olduğu json verilerini mobil uygulamada çalıştıramıyorum ? Konuya ilgili yardımcı olabilecek birileri var mı ?

ilgili json verisi postmande çalışıyor.

Aldığım hata: Connection refused (OS Error: Connection refused, errno = 111), address = 127.0.0.1, port = 48640, uri=https://127.0.0.1:5001/api/categories/getall

  • HseyinAkkaya replied to this.
    • Problem Çözüldü:

      .NET Core Kullanan arkadaşların projeyi yönetici olarak açıp WebApi>Properties>Debug>Launch “IIS Express” olarak değiştirmesi ve altta bulunan App URL kısmında bilgisayarın sabitlenen ip adresini projeye tanıtıp (http://SABİTLENENIP:5005 gibi ) daha sonra ‘Hosting Model’ yazan yeri Out of Process olarak değiştirip ‘Enable SSL’ tikini kaldırıp öyle çalıştırması gerekiyor.

      Daha sonra Flutter kodlarımızda bu tanımlamış olduğumuz kendi bilgisayar ipimizi (http://SABİTLENENIP:5005) tanıtmamız gerekiyor.

      Not: Kullanılan cihaz fiziksel bir mobil cihaz ise bilgisayar ile aynı ağda olması gerekiyor.
      Not: Firewall kapatmanız veya Projede kullanmış olduğunuz Portu Firewall’a tanımlamanız gerekiyor.

      Teşekkürler HseyinAkkaya

    cansalik
    Sorunun sebebi ip adresini yanlış vermenizden kaynaklanıyor.
    127.0.0.1 ip adresi localhost anlamına gelir. Ve çalıştırdığınız uygulama (Postman) çalıştığı cihazdan veri çekmeye çalışır.
    Aynı adres ile mobilde api çağırırsanız mobil uygulama yine kendi üzerindeki api sunucusuna bağlanmaya çalışır. Ancak sizin api sunucunuz mobilde değil bilgisayar üzerinde kurulu. Bu sebeple mobil cihaz üzerinde api sunucusu olmadığı için “Connection refused” hatası alıyorsunuz. Yapmanız gereken bilgisayarın ip adresini (192.168.1.10 veya 192.168.0.15 gibi) url kısmında vermeniz gerek (https://192.168.1.10:5001/api/categories/getall). Bilgisayarınızın ip adresini ağ bağdaçtırıcı ayarlarından veya komut satırına “ipconfig” yazarak öğrenebilirsiniz.

      cansalik
      Bunun iki sebebi olabilir.

      1. Emulator kullanıyorsanız sanal ağ kurulmuştur ve bilgisayarınızın sanal ağdaki ip adresini vermeniz gerekir.
      2. Web api sunucunuz dışardan gelen isteklere cevap vermiyordur. Bunu denemek için cep telefonunuz wifi ile bağlıyken ( yani pc ile aynı ağda iken) mobil için postman uygulamalarıyla apiye dışardan bağlantıyı deneyin.

      Bir de apiyi hangi dil ve ide ile yazıyorsunuz? Sunucu olarak ne kullanıyorsunuz?

      cansalik siteyi iisexpress ile çalıştırdığınız zaman sadece local bağlantıya izin verir.dışarıdan bağlantı kabul etmek için bazı ayarlamalar gerek.

      1. Ağ bağdaştırıcınızın ip adresini sabitleyin.
      2. Firewall kapatın veya 5001 portuna her iki yönde de izin verin.
      3. Aşağıdaki komutları komut satırını yönetici olarak açarak çalıştırın. “project path”" yazan kısma web projenizin bulunduğu dizini verin.
           netsh http add urlacl url=http://*:5001/ user=everyone
           cd C:\Program Files\IIS Express
           appcmd add site /name:"AppName" /bindings:http/*:5001:* /physicalPath:"project path"
           iisexpress /site:AppName
        Bu işlemleri yaptıktan sonra komut penceresi açık olduğu sürece iis çalışır ve isteklere cevap verir. “q” basarsanız iis kapanır. Tekrar çalıştırmak için yine yönetici olarak açılmış komut satırına
        "C:\Program Files\IIS Express\iisexpress.exe" /site:AppName
        yazabilirsiniz. Diğer işlemleri tekrar etmeniz gerekmez. Unutmayın ki bu işlem derlenmiş bir web sitesi projesini iis’e vererek çalıştırır. Kodda değişiklik yaparsanız iis kapatıp kodu derlemeniz ve iis’i tekrar açmanız gerekir.
        iis kapanması uzun sürerse görev yöneticisinden iisexpress.exe uygulamasını sonlandırabilirsiniz.

        Denedim fakat yine olmadı, acaba Backend için gereken bir şeyler mi var bilemedim.

        try {
        const baseUrl = “https://localhost:5001”;
        const apiPath = “/api/categories/getall”;
        final url = Uri.parse(‘$baseUrl$apiPath’);
        print(url);
        final response = await http.get(url);
        print(“response”);
        final body = response.body;
        final json = jsonDecode(body);
        setState(() {
        categories = json[‘data’];
        });
        print(“Başarılı”);
        }
        catch (e)
        {
        print(“Catch: ”+e.toString());
        }


        isteği bu şekilde oluşturuyorum herhangi bir hata yok değil mi ? 

        cansalik hata var localhost yazmayın ip adresi yazın
        const baseUrl = “https://localhost:5001”;

        HseyinAkkaya
        BackEnd tarafında çalışan projenin Startup.cs adlı dosyasında yapılan cors işlemlerine ait kodlamalar aşağıda yer almaktadır.

        public void Configure(IApplicationBuilder app, IWebHostEnvironment env)

            {
                if (env.IsDevelopment())
                {
                    app.UseDeveloperExceptionPage();
                }
                app.ConfigureCustomExceptionMiddleware(); 
                
                //app.UseCors(builder => builder.WithOrigins("https://10.0.2.2:5000", "http://10.0.2.2:5000").AllowAnyHeader().AllowAnyMethod()); /* Önceki denemelerim */
        
                app.UseCors(builder => builder.AllowAnyOrigin().AllowAnyMethod().AllowAnyHeader());
        
                app.UseHttpsRedirection();
        
                app.UseRouting();
        
                app.UseAuthentication();
        
                app.UseAuthorization();
        
                app.UseEndpoints(endpoints =>
                {
                    endpoints.MapControllers();
                });
            }

        Aşağıda ilgili CMD komutunu yazdıktan sonra aldığım hata yer almaktadır. (Var olan bütün işlemleri kapatıp tekrardan başlattım)

        C:\Windows\System32>netsh http add urlacl url=http://*:5001/ user=everyone

        Url reservation add failed, Error: 183
        Halen varolan bir dosya oluşturulamaz.

        C:\Windows\System32> cd C:\Program Files\IIS Express

        C:\Program Files\IIS Express> appcmd add site /name:“AppName” /bindings:http/:5000: /physicalPath:“C:\Users\Neset\Desktop\Projeler\Recycle\RecycleProject\WebAPI\WebAPI.csproj”
        ERROR ( message:Yinelenen “AppName” koleksiyon öğesi eklenemedi. )

        C:\Program Files\IIS Express> iisexpress /site:AppName
        Starting IIS Express …
        Failed to register URL “http://*:5001/” for site “AppName” application “/”. Error description: Dosya ba■ka bir i■lem taraf²ndan kullan²ld²­²ndan bu i■lem dosyaya eri■emiyor. (0×80070020)
        Unable to start iisexpress.

        Dosya başka bir işlem tarafından kullanıldığından bu işlem dosyaya erişemiyor.
        For more information about the error, run iisexpress.exe with the tracing switch enabled (/trace:error).

        Aşağıda flutter tarafında http isteği attığım kodlamalar yer almaktadır:

        void getCategory() async
        {
        try {
        const baseUrl = “https://192.168.2.30:5001”;
        const apiPath = “/api/categories/getall”;
        final url = Uri.parse(‘$baseUrl$apiPath’);
        print(url);
        final response = await http.get(url);
        print(“response”);
        final body = response.body;
        final json = jsonDecode(body);
        setState(() {
        categories = json[‘data’];
        });
        print(“Başarılı”);
        }
        catch (e)
        {
        print(“Catch: ”+e.toString());
        }
        }


          Problem Çözüldü:

          .NET Core Kullanan arkadaşların projeyi yönetici olarak açıp WebApi>Properties>Debug>Launch “IIS Express” olarak değiştirmesi ve altta bulunan App URL kısmında bilgisayarın sabitlenen ip adresini projeye tanıtıp (http://SABİTLENENIP:5005 gibi ) daha sonra ‘Hosting Model’ yazan yeri Out of Process olarak değiştirip ‘Enable SSL’ tikini kaldırıp öyle çalıştırması gerekiyor.

          Daha sonra Flutter kodlarımızda bu tanımlamış olduğumuz kendi bilgisayar ipimizi (http://SABİTLENENIP:5005) tanıtmamız gerekiyor.

          Not: Kullanılan cihaz fiziksel bir mobil cihaz ise bilgisayar ile aynı ağda olması gerekiyor.
          Not: Firewall kapatmanız veya Projede kullanmış olduğunuz Portu Firewall’a tanımlamanız gerekiyor.

          Teşekkürler HseyinAkkaya

          Write a Reply...