Aracılığıyla paylaş


Android öykünücülerinden ve iOS simülatörlerinden yerel web hizmetlerine bağlanma

Örneğe göz atın. Örneğe göz atın

Birçok mobil ve masaüstü uygulaması web hizmetlerini kullanır. Yazılım geliştirme aşamasında, bir web hizmetini yerel olarak dağıtmak ve Android öykünücüsunda veya iOS simülatöründe çalışan bir uygulamadan kullanmak yaygın bir işlemdir. Bu, web hizmetini barındırılan bir uç noktaya dağıtmak zorunda kalmamasını sağlar ve hem uygulama hem de web hizmeti yerel olarak çalıştığından basit bir hata ayıklama deneyimi sağlar.

Windows veya MacCatalyst üzerinde çalışan .NET Çok Platformlu Uygulama Kullanıcı Arabirimi (.NET MAUI) uygulamaları, geliştirme sertifikanıza güvenmiş olmanız koşuluyla HTTP veya HTTPS üzerinden yerel olarak çalışan ASP.NET Core web hizmetlerini ek bir çalışma yapmadan kullanabilir. Ancak, uygulama Android öykünücüsunda veya iOS simülatöründe çalışırken ek çalışma gerekir ve web hizmetinin HTTP veya HTTPS üzerinden çalışıp çalışmadığına bağlı olarak işlem farklıdır.

Yerel makine adresi

Android öykünücüsü ve iOS simülatörü, yerel makinenizde HTTP veya HTTPS üzerinden çalışan web hizmetlerine erişim sağlar. Ancak, her biri için yerel makine adresi farklıdır.

Android

Android öykünücüsünün her örneği geliştirme makinesi ağ arabirimlerinizden yalıtılır ve bir sanal yönlendiricinin arkasında çalışır. Bu nedenle, öykünülmüş bir cihaz geliştirme makinenizi veya ağdaki diğer öykünücü örneklerini göremez.

Ancak, her öykünücünün sanal yönlendiricisi önceden ayrılmış adresleri içeren özel bir ağ alanını yönetir ve adres ana 10.0.2.2 bilgisayar geri döngü arabiriminizin diğer adıdır (geliştirme makinenizde 127.0.0.1). Bu nedenle, göreli URI aracılığıyla /api/todoitems/ get işlemini kullanıma sunan yerel bir web hizmeti verüldüğünde, Android öykünücüsnde çalışan bir uygulama veya https://10.0.2.2:<port>/api/todoitems/öğesine http://10.0.2.2:<port>/api/todoitems/ get isteği göndererek işlemi kullanabilir.

iOS

iOS simülatörü konak makine ağını kullanır. Bu nedenle, simülatörde çalışan uygulamalar, yerel makinenizde çalışan web hizmetlerine makinelerin IP adresi veya ana bilgisayar adı aracılığıyla localhost bağlanabilir. Örneğin, göreli URI aracılığıyla /api/todoitems/ get işlemini kullanıma sunan yerel bir web hizmeti verüldüğünde, iOS simülatöründe çalışan bir uygulama veya https://localhost:<port>/api/todoitems/öğesine http://localhost:<port>/api/todoitems/ bir GET isteği göndererek işlemi kullanabilir.

Not

Windows'tan iOS simülatöründe bir .NET MAUI uygulaması çalıştırırken, uygulama Windows için uzak iOS simülatöründe görüntülenir. Ancak, uygulama eşleştirilmiş Mac üzerinde çalışıyor. Bu nedenle, Mac üzerinde çalışan bir iOS uygulaması için Windows'ta çalışan bir web hizmetine localhost erişimi yoktur.

HTTP üzerinden çalışan yerel web hizmetleri

Android öykünücüsü veya iOS simülatöründe çalışan bir .NET MAUI uygulaması, HTTP üzerinden yerel olarak çalışan bir ASP.NET Core web hizmetini kullanabilir. Bu, .NET MAUI uygulama projenizi ve ASP.NET Core web hizmeti projenizi düz metin HTTP trafiğine izin verecek şekilde yapılandırarak elde edilebilir.

.NET MAUI uygulamanızda yerel web hizmetinizin URL'sini tanımlayan kodda, web hizmeti URL'sinin HTTP düzenini ve doğru ana bilgisayar adını belirttiğinden emin olun. sınıfı, DeviceInfo uygulamanın üzerinde çalıştığı platformu algılamak için kullanılabilir. Ardından doğru konak adı aşağıdaki gibi ayarlanabilir:

public static string BaseAddress =
    DeviceInfo.Platform == DevicePlatform.Android ? "http://10.0.2.2:5000" : "http://localhost:5000";
public static string TodoItemsUrl = $"{BaseAddress}/api/todoitems/";

Sınıfı hakkında DeviceInfo daha fazla bilgi için bkz . Cihaz bilgileri.

Ayrıca, uygulamanızı Android'de çalıştırmak için gerekli ağ yapılandırmasını eklemeniz ve uygulamanızı iOS'ta çalıştırmak için Apple Aktarım Güvenliği'ni (ATS) geri çevirmeniz gerekir. Daha fazla bilgi için bkz . Android ağ yapılandırması ve iOS ATS yapılandırması.

ayrıca ASP.NET Core web hizmetinizin HTTP trafiğine izin verecek şekilde yapılandırıldığından emin olmanız gerekir. Bu, ASP.NET Core web hizmeti projenizdeki launchSettings.json bölümüne bir HTTP profili profiles ekleyerek elde edilebilir:

{
  ...
  "profiles": {
    "http": {
      "commandName": "Project",
      "dotnetRunMessages": true,
      "launchBrowser": true,
      "launchUrl": "api/todoitems",
      "applicationUrl": "http://localhost:5000",
      "environmentVariables": {
        "ASPNETCORE_ENVIRONMENT": "Development"
      }
    },
    ...
  }
}

Android öykünücüsü veya iOS simülatöründe çalışan bir .NET MAUI uygulaması, web hizmetinin profille birlikte başlatılması koşuluyla http HTTP üzerinden yerel olarak çalışan bir ASP.NET Core web hizmetini kullanabilir.

Android ağ yapılandırması

Android'de düz metin yerel trafiğini etkinleştirmeye yönelik iki ana yaklaşım vardır:

  • Tüm etki alanlarıyla iletişim için düz metin ağ trafiğini etkinleştirin. Daha fazla bilgi için bkz . Tüm etki alanları için düz metin ağ trafiğini etkinleştirme.
  • Etki alanıyla localhost iletişim için düz metin ağ trafiğini etkinleştirin. Daha fazla bilgi için bkz . Localhost etki alanı için düz metin ağ trafiğini etkinleştirme.

Tüm etki alanları için düz metin ağ trafiğini etkinleştirme

Özniteliğin trueözelliği Application olarak ayarlanarak UsesCleartextTraffic tüm etki alanları için düz metin ağ trafiği etkinleştirilebilir. Bu, .NET MAUI uygulama projenizdeki Platformlar Android MainApplication.cs dosyasında gerçekleştirilmelidir ve bir üretim uygulamasında yanlışlıkla etkinleştirilmediğinden emin olmak için içine #if DEBUG sarmalanmalıdır: > >

#if DEBUG
[Application(UsesCleartextTraffic = true)]
#else
[Application]
#endif
public class MainApplication : MauiApplication
{
    public MainApplication(IntPtr handle, JniHandleOwnership ownership)
        : base(handle, ownership)
    {
    }

    protected override MauiApp CreateMauiApp() => MauiProgram.CreateMauiApp();
}

Not

Bir UsesCleartextTraffic ağ güvenliği yapılandırma dosyası varsa Android 7.0 (API 24) ve üzeri sürümlerde özelliği yoksayılır.

localhost etki alanı için düz metin ağ trafiğini etkinleştirme

Etki alanı için localhost düz metin ağ trafiği, bir ağ güvenlik yapılandırma dosyası oluşturularak etkinleştirilebilir. Bu, .NET MAUI uygulama projenizdeki Platforms\Android\Resources\xml klasörüne network_security_config.xml adlı yeni bir XML dosyası ekleyerek elde edilebilir. XML dosyası aşağıdaki yapılandırmayı belirtmelidir:

<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
  <domain-config cleartextTrafficPermitted="true">
    <domain includeSubdomains="true">10.0.2.2</domain>
  </domain-config>
</network-security-config>

Not

network_security_config.xml dosyasının derleme eyleminin AndroidResource olarak ayarlandığından emin olun.

Ardından, .NET MAUI uygulama projenizdeki Platforms\Android\AndroidManifest.xml dosyasındaki uygulama düğümünde networkSecurityConfig özelliğini yapılandırın:

<?xml version="1.0" encoding="utf-8"?>
<manifest>
    <application android:networkSecurityConfig="@xml/network_security_config" ...>
        ...
    </application>
</manifest>

Ağ güvenliği yapılandırma dosyaları hakkında daha fazla bilgi için bkz . developer.android.com'de ağ güvenliği yapılandırması .

iOS ATS yapılandırması

iOS'ta düz metin yerel trafiğini etkinleştirmek için .NET MAUI uygulamanızda Apple Aktarım Güvenliği'ni (ATS) geri çevirmeniz gerekir. Bu, .NET MAUI uygulama projenizdeki Platforms\iOS\Info.plist dosyasına aşağıdaki yapılandırma eklenerek elde edilebilir:

<key>NSAppTransportSecurity</key>    
<dict>
    <key>NSAllowsLocalNetworking</key>
    <true/>
</dict>

ATS hakkında daha fazla bilgi için bkz . developer.apple.com'da Güvenli Olmayan Ağ Bağlantılarını Engelleme.

HTTPS üzerinden çalışan yerel web hizmetleri

Android öykünücüsü veya iOS simülatöründe çalışan bir .NET MAUI uygulaması, HTTPS üzerinden yerel olarak çalışan bir ASP.NET Core web hizmetini kullanabilir. Bunu etkinleştirme işlemi aşağıdaki gibidir:

  1. Makinenizde otomatik olarak imzalanan geliştirme sertifikasına güvenin. Daha fazla bilgi için bkz . Geliştirme sertifikanıza güvenme.
  2. Yerel makinenizin adresini belirtin. Daha fazla bilgi için bkz . Yerel makine adresini belirtme.
  3. Yerel geliştirme sertifikası güvenlik denetimini atla. Daha fazla bilgi için bkz . Sertifika güvenlik denetimini atlama.

Her öğe sırayla ele alınacaktır.

Geliştirme sertifikanıza güvenme

.NET Core SDK'sını yüklemek, ASP.NET Core HTTPS geliştirme sertifikasını yerel kullanıcı sertifika deponuza yükler. Ancak, sertifika yüklenirken güvenilir değildir. Sertifikaya güvenmek için dotnet dev-certs aracını çalıştırmak için aşağıdaki tek seferlik adımı gerçekleştirin:

dotnet dev-certs https --trust

Aşağıdaki komut araçla ilgili dev-certs yardım sağlar:

dotnet dev-certs https --help

Alternatif olarak, HTTPS kullanan bir ASP.NET Core 2.1 projesi (veya üzeri) çalıştırdığınızda, Visual Studio geliştirme sertifikasının eksik olup olmadığını algılar ve sertifikayı yükleyip güvenmeyi teklif eder.

Not

ASP.NET Core HTTPS geliştirme sertifikası otomatik olarak imzalanır.

Makinenizde yerel HTTPS'yi etkinleştirme hakkında daha fazla bilgi için bkz . Yerel HTTPS'yi etkinleştirme.

Yerel makine adresini belirtin

.NET MAUI uygulamanızdaki yerel web hizmetinizin URL'sini tanımlayan kodda, web hizmeti URL'sinin HTTPS düzenini ve doğru ana bilgisayar adını belirttiğinden emin olun. sınıfı, DeviceInfo uygulamanın üzerinde çalıştığı platformu algılamak için kullanılabilir. Ardından doğru konak adı aşağıdaki gibi ayarlanabilir:

public static string BaseAddress =
    DeviceInfo.Platform == DevicePlatform.Android ? "https://10.0.2.2:5001" : "https://localhost:5001";
public static string TodoItemsUrl = $"{BaseAddress}/api/todoitems/";

Sınıfı hakkında DeviceInfo daha fazla bilgi için bkz . Cihaz bilgileri.

Sertifika güvenlik denetimini atlama

Android öykünücüsunda çalışan bir .NET MAUI uygulamasından yerel güvenli bir web hizmeti çağırmaya çalışmak, sertifika yolu için güven bağlantı noktasının bulunamadığını belirten bir iletiyle birlikte bir java.security.cert.CertPathValidatorException atılmaya neden olur. Benzer şekilde, iOS simülatöründe çalışan bir .NET MAUI uygulamasından yerel güvenli bir web hizmeti çağırmaya çalışmak, sunucu sertifikasının geçersiz olduğunu belirten bir iletiyle hataya neden NSURLErrorDomain olur. Bu hatalar, yerel HTTPS geliştirme sertifikası otomatik olarak imzalandığından ve otomatik olarak imzalanan sertifikalara Android veya iOS tarafından güvenilmediğinden oluşur. Bu nedenle, bir uygulama yerel güvenli bir web hizmeti kullandığında SSL hatalarını yoksaymak gerekir.

Bu, sınıfına HTTPS üzerinden localhost iletişimine HttpClientHandler güvenmesini belirten HttpClient özel ServerCertificateCustomValidationCallbackile bir örneği yapılandırılarak gerçekleştirilebilir. Aşağıdaki örnekte localhost sertifika doğrulama hatalarını yoksayacak bir örneğinin HttpClientHandler nasıl oluşturulacağı gösterilmektedir:

var handler = new HttpClientHandler();

#if DEBUG
handler.ServerCertificateCustomValidationCallback = (message, cert, chain, errors) =>
{
    if (cert != null && cert.Issuer.Equals("CN=localhost"))
        return true;
    return errors == System.Net.Security.SslPolicyErrors.None;
};
#endif

var client = new HttpClient(handler);

Önemli

Yukarıdaki kod localhost sertifika doğrulama hatalarını yoksayar, ancak yalnızca hata ayıklama derlemelerinde. Bu yaklaşım, üretim derlemelerinde güvenlik olaylarını önler.

Android öykünücüsü veya iOS simülatöründe çalışan bir .NET MAUI uygulaması daha sonra HTTPS üzerinden yerel olarak çalışan bir ASP.NET Core web hizmetini kullanabilir.