Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Ö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.
Tavsiye
.NET 10 veya sonraki bir sürümü kullanıyorsanız, yerel web hizmetlerine bağlanmayı kolaylaştırmak için Aspire tümleştirmesini kullanmayı göz önünde bulundurun. Aspire platforma özgü ağ yapılandırmasını, hizmet bulma ve geliştirme tünellerini otomatik olarak işler ve bu makalede açıklanan el ile yapılandırmanın çoğunu ortadan kaldırır.
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, ek bir işleme gerek duymadan HTTP veya HTTPS üzerinden yerel olarak çalışan ASP.NET Core web hizmetlerini tüketebilir. 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 makinenizin ağ arabirimlerinden izole edilmiştir ve sanal bir yönlendirici arkasında çalıştırılır. Bu nedenle, emüle edilmiş bir cihaz geliştirme makinenizi veya ağda 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 10.0.2.2 bilgisayarınızdaki loopback arabiriminizin diğer adıdır (geliştirme makinenizde 127.0.0.1). Bu nedenle, göreli URI aracılığıyla
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'yi kullanarak
Not
Windows'tan iOS simülatörünü çalıştırarak bir .NET MAUI uygulaması çalıştırdığınızda, 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. Uygulamanın üzerinde çalıştığı platformu algılamak için DeviceInfo sınıfı 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ıyla ilgili daha fazla bilgi için Cihaz bilgileri'ne bakın.
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 profiles"launchSettings.json" bölümüne bir HTTP profili ekleyerek elde edilebilir.
{
...
"profiles": {
"http": {
"commandName": "Project",
"dotnetRunMessages": true,
"launchBrowser": true,
"launchUrl": "api/todoitems",
"applicationUrl": "http://localhost:5000",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}
},
...
}
}
Android emülatörü veya iOS simülatöründe çalışan bir .NET MAUI uygulaması, http profil ile başlatıldığında 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.
- Düz metin ağ trafiğini
localhostdomaini ile iletişim için 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 Application'in UsesCleartextTraffic özelliği true olacak şekilde ayarlanarak tüm etki alanları için düz metin ağ trafiği etkinleştirilebilir. Bu işlem, .NET MAUI uygulama projenizdeki Platformlar > Android > MainApplication.cs dosyasında gerçekleştirilmelidir ve bir #if DEBUG `#if DEBUG` koşullu derleme sembolü içinde yer almalıdır, böylece bir üretim uygulamasında yanlışlıkla etkinleştirilmez.
#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
Android 7.0 (API 24) ve üzeri sürümlerde bir ağ güvenliği yapılandırma dosyası mevcutsa `UsesCleartextTraffic` özelliği yoksayılır.
localhost etki alanı için düz metin ağ trafiğini etkinleştirme
Alan adı için localhost açık 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 developer.android.com sitesindeki Ağ Güvenliği Yapılandırması sayfasına bakın.
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, developer.apple.com'daki Güvensiz Ağ Bağlantılarını Önleme sayfasına bakın.
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:
- Makinenizde otomatik olarak imzalanan geliştirme sertifikasına güvenin. Daha fazla bilgi için bkz Geliştirme sertifikanıza güvenin.
- Yerel makinenizin adresini belirtin. Daha fazla bilgi için bkz. Yerel makine adresini belirtme.
- 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üklendi fakat güvenilir değil. 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, dev-certs aracı hakkında 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.
Bilgisayarınızda 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. Uygulamanın üzerinde çalıştığı platformu algılamak için DeviceInfo sınıfı 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ıyla ilgili daha fazla bilgi için Cihaz bilgileri'ne bakın.
Sertifika güvenlik denetimini atlama
Android öykünücüsünde çalışan bir .NET MAUI uygulamasından yerel güvenli bir web hizmeti çağırmaya çalışmak, java.security.cert.CertPathValidatorException’un atılmasına neden olur ve bu mesaj, sertifikasyon yolu için güven kaynağının bulunamadığını belirtir. 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 olarak güvenli bir web hizmeti kullandığında SSL hatalarını yoksaymak gerekir.
HttpClientHandler nesnesini özel ServerCertificateCustomValidationCallback ile yapılandırarak ve HttpClient sınıfına HTTPS üzerinden localhost iletişimine güvenmesi talimatını vererek bu gerçekleştirilebilir. Aşağıdaki örnek, localhost sertifika doğrulama hatalarını yok sayacak bir HttpClientHandler örneğinin nasıl oluşturulacağını göstermektedir:
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 sürümlerinde 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.