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...