ASP.NET Web Sayfaları (Razor) Sorun Giderme Kılavuzu
yazan: Tom FitzMacken
Bu makalede, ASP.NET Web Sayfaları (Razor) ile çalışırken karşılaşabileceğiniz sorunlar ve bazı önerilen çözümler açıklanmaktadır.
Yazılım sürümleri
- ASP.NET Web Sayfaları (Razor) 3
Bu öğretici ASP.NET Web Sayfaları 2 ve ASP.NET Web Sayfaları 1.0 ile de çalışır.
Bu konu aşağıdaki bölümleri içermektedir:
- Çalışan Sayfalarla İlgili Sorunlar
- Razor Code ile ilgili sorunlar
- Güvenlik ve Üyelik sorunları
- gönderme Email ile ilgili sorunlar
- Ek Kaynaklar
Genel sorular için bkz. ASP.NET Web Sayfaları (Razor) SSS.
Çalışan Sayfalarla İlgili Sorunlar
Çeşitli sorunlar .cshtml ve .vbhtml sayfalarının düzgün çalışmasını engelleyebilir. Bu bölümde yaygın hata iletileri ve olası nedenler listelenir.
HTTP Hatası 403 - Yasak: Erişim reddedildi
Sağladığınız kimlik bilgilerini kullanarak bu dizini veya sayfayı görüntüleme izniniz yok.
Sunucu .NET Framework doğru sürümünü çalıştırmıyorsa bu hata oluşabilir. Sunucuyu çalıştıran bilgisayarda (yerel veya uzaktan) en az .NET Framework 4'ün yüklü olduğundan emin olun. Ayrıca uygulamanın doğru sürümü çalıştıracak şekilde yapılandırıldığından emin olun.
WebMatrix'te çalışırken bu sorunu yerel olarak görüyorsanız , Site çalışma alanına tıklayın ve sonra ağaç görünümünde Ayarlar'a tıklayın. .NET Framework Sürümünü Seç listesinde .NET 4 (Tümleşik)'i seçin. Bu sürüm zaten ayarlanmışsa WebMatrix'i yönetici olarak çalıştırmayı deneyin.
Web sitenizin kökünde en az bir .cshtml dosyası bulunduğundan emin olun.
Web sunucusu uzak bir sunucudayken bu hatayı görürseniz sunucu yöneticisine başvurun. Sunucuda .NET Framework 4 veya üzerinin yüklü olduğundan emin olun. Ayrıca uygulamanın the.NET Framework'ün bu sürümünü kullanacak şekilde yapılandırılmış bir uygulama havuzunda çalıştığından emin olun.
Sunucu üzerinde denetiminiz varsa, .NET Framework doğru sürümünü çalıştırdığından emin olun. Komutunu çalıştırarak yüklemeyi onarmayı aspnet_regiis -iru
da deneyebilirsiniz. (Örneğin, .NET Framework yükledikten sonra IIS yüklerseniz, IIS ASP.NET sayfaları çalıştıracak şekilde doğru yapılandırılmaz.) Daha fazla bilgi için bkz. iis kayıt aracı (Aspnet_regiis.exe) ASP.NET.
HTTP Hatası 403.14 - Yasak
Web sunucusu, bu dizinin içeriğini listelemeyecek şekilde yapılandırıldı.
Korumalı (Web.configdosyası gibi) veya korunan bir klasörde (App_Data veyaApp_Code gibi) bir kaynak istediğinizde bu hata oluşabilir.
HTTP Hatası 404.17 - Bulunamadı
İstenen içerik betik gibi görünüyor ve statik dosya işleyicisi tarafından sunulmayacak.
Bu hata, sunucu .NET Framework 4 veya üzerini kullanacak şekilde doğru yapılandırılmamışsa ve bu nedenle bloklardaki @{ }
kodu tanımıyorsa oluşabilir. HTTP Hatası 403 - Yasak: Erişim reddedildi için daha önceki açıklamaya bakın.
HTTP Hatası 404.7 - Bulunamadı
İstek filtreleme modülü, dosya uzantısını reddedecek şekilde yapılandırıldı
.cshtml veya .vbhtml uzantıları sunucuda açıkça engellenmişse bu hata oluşabilir. Bu sorunun belirtisi, URL'ler uzantıyı içermediğinde çalışır, ancak .cshtml veya .vbhtml içeren URL'ler çalışmaz. Olası bir çözüm, sitenin Web.config dosyasındaki uzantıları yeniden etkinleştirmektir. Aşağıdaki örnekte .cshtml uzantısının nasıl etkinleştirileceği gösterilmektedir.
<system.webServer>
<security>
<requestFiltering>
<fileExtensions>
<remove fileExtension=".cshtml" />
<add fileExtension=".cshtml" allowed="true" />
</fileExtensions>
</requestFiltering>
</security>
</system.webServer>
HTTP Hatası 404.8 - Bulunamadı
İstek filtreleme modülü, url'de hiddenSegment bölümü içeren yolu reddedecek şekilde yapılandırılmıştır.
Korumalı (Web.configdosyası gibi) veya korunan bir klasörde (App_Data veyaApp_Code gibi) bir kaynak istediğinizde bu hata oluşabilir.
Bu sayfa türü sunulmaz ('/' Uygulamasında Sunucu Hatası)
HTTP Hatası 404.17 için daha önceki açıklamaya bakın.
Razor koduyla ilgili sorunlar
Geçerli bağlamda 'class' adı yok
Genellikle, bu hatayı görmenizin bir nedeni bir yardımcıya class
başvurmaktır, ancak yardımcı yüklü değildir. Örneğin, bir yardımcı kullanmayı denerseniz ancak paketi NuGet'ten yüklemediyseniz bu hatayı görürsünüz. Yardımcıyı bulmak ve yüklemek için WebMatrix'teki Galeri'yi kullanın.
Yardımcı yüklüyse ancak sayfa bunu hala tanımıyorsa koda bir using
deyim eklemeyi deneyin. deyiminde using
, yardımcıyı içeren ad alanına başvurun. Örneğin, ASP.NET Web Yardımcıları paketindeki temel yardımcılar ad alanındadır System.Web.Helpers
. Yardımcıyı kullanmak istediğiniz sayfanın en üstüne şu satırı ekleyin:
@using Microsoft.Web.Helpers;
Güvenlik ve Üyelik sorunları
ASP.NET Web Sayfalarında (Razor) yerleşik güvenlik (üyelik) sistemini kullanıyorsanız aşağıdaki sorunlarla karşılaşabilirsiniz.
Bu yöntemi çağırmak için "Membership.Provider" özelliğinin bir "ExtendedMembershipProvider" örneği olması gerekir
Bu hata, hiçbir AspNetSqlMembershipProvider
sınıfın yapılandırılmadığını gösterebilir. (Bir belirti, sitenin yerel olarak düzgün çalıştığını ancak bir barındırma sağlayıcısının sunucusunda yayımladığınızda bu hatayı attığını gösterir.) Bu sorunun bir düzeltmesi, sitenin Web.config dosyasına aşağıdakileri ekleyerek basit üyeliği açıkça etkinleştirmektir:
<configuration>
<!-- other setting -->
<appSettings>
<add key="enableSimpleMembership" value="true" />
</appSettings>
<!-- other settings -->
</configuration>
gönderme Email ile ilgili sorunlar
E-posta göndermeyle ilgili sorunların hata ayıklaması zor olabilir. İlk sorun, SMTP sunucusuna bağlanamamanız olabilir. Bağlantı başarılı olursa, ASP.NET iletiyi SMTP sunucusuna iletin. Ancak iletinin kendisiyle ilgili, SMTP sunucusunun göndermesini engelleyen sorunlar olabilir.
Uygulamanız başarıyla e-posta göndermezse aşağıdakileri deneyin:
- SMTP sunucusu adı genellikle veya
smtp.provider.net
gibismtp.provider.com
bir addır. Ancak, sitenizi bir barındırma sağlayıcısında yayımlarsanız, bu noktada SMTP sunucu adı olabilirlocalhost
. Bu durum, siz yayımladıktan ve siteniz sağlayıcının sunucusunda çalıştırıldıktan sonra, SMTP sunucusunun uygulamanızın perspektifinden yerel olabileceğinden oluşur. Sunucu adlarındaki bu değişiklik, yayımlama işleminizin bir parçası olarak SMTP sunucu adını değiştirmeniz gerekebileceği anlamına gelebilir. - Bağlantı noktası numarası genellikle 25'tir. Ancak, bazı sağlayıcılar 587 numaralı bağlantı noktasını veya başka bir bağlantı noktasını kullanmanızı gerektirir. SMTP sunucusunun sahibine, kullanmanızı bekledikleri bağlantı noktası numarasını denetleyin.
- Doğru kimlik bilgilerini kullandığınızdan emin olun. Sitenizi bir barındırma sağlayıcısında yayımladıysanız, sağlayıcının özellikle e-posta için olduğunu belirttiği kimlik bilgilerini kullanın. Bu kimlik bilgileri, yayımlamak için kullandığınız kimlik bilgilerinden farklı olabilir.
- Bazen kimlik bilgilerine hiç ihtiyacınız olmaz. Kişisel ISS'nizi kullanarak e-posta gönderiyorsanız, e-posta sağlayıcınız kimlik bilgilerinizi zaten biliyor olabilir. Yayımladıktan sonra, yerel bilgisayarınızda test ettiğinizden farklı kimlik bilgileri kullanmanız gerekebilir.
- E-posta sağlayıcınız şifreleme kullanıyorsa olarak ayarlayın
WebMail.EnableSsl
true
.
E-posta gönderirken bir hata varsa, aşağıdakine benzer bir standart ASP.NET hata iletisi görebilirsiniz:
Ayrıca, aşağıdaki örnekte olduğu gibi bir try-catch
blok kullanarak e-posta gönderme sorunlarının hatalarını ayıklayabilirsiniz. Bir try-catch
blok kullandığınızda, ASP.NET standart hata iletilerini görüntülemez. Bunun yerine, bloğun catch
bölümünde hatayı yakalayabilirsiniz.
var errorMessage = "";
try {
// Initialize WebMail helper
WebMail.SmtpServer = "your-SMTP-server-name";
WebMail.SmtpPort = 25; // Or the port you've been told to use
WebMail.EnableSsl = false;
WebMail.UserName = "your-login-name";
WebMail.Password = "your-password";
WebMail.From = "your-from-address";
WebMail.Send(to: test-To-address,
subject: "Test email message",
body: "This is a debug email message"
);
}
catch (Exception ex ) {
errorMessage = ex.Message;
}
// Other code or markup here ...
<!-- In markup, add the following -->
@if(!errorMessage.IsEmpty()){
<p>@errorMessage</p>
}
için your-SMTP-server-name
uygun değerleri değiştirin ve bu şekilde devam edin. Bu şekilde görebileceğiniz hata iletilerinden bazıları şunlardır:
Posta gönderme hatası.
-veya-
Bağlı taraf belirli bir süre sonra düzgün yanıt vermediğinden veya bağlı ana bilgisayar yanıt vermediğinden bağlantı kurulamadı ve bağlantı girişimi başarısız oldu
Bu hata genellikle uygulamanın SMTP sunucusuna bağlanamadığı anlamına gelir. Sunucu adını ve bağlantı noktası numarasını denetleyin.
Posta kutusu kullanılamıyor. Sunucu yanıtı: 5.1.0 <someuser@invaliddomain> gönderen reddetti: geçersiz gönderen etki alanı
Bu ileti adresin
From
doğru olmadığını veya eksik olduğunu gösterebilir.Belirtilen dize bir e-posta adresi için gereken biçimde değil.
Bu hata, veya
From
özelliklerinin değerininTo
e-posta adresi olarak tanınmadığını gösterebilir. (ASP.NET e-posta adresinin geçerli olup olmadığını, yalnızca doğru biçimde olup olmadığını denetleyemiyor, örneğin name@domain.com.)
Not
Sayfayı canlı bir sitede yayımlamadan önce hatayı (@errorMessage
) görüntüleyen işaretlemeyi kaldırın. Kullanıcıların bir sunucudan gelen hata iletilerini görmesine izin vermek iyi bir fikir değildir.
Ek Kaynaklar
ASP.NET Web Sayfaları (Razor) SSS
ASP.NET web sitesindeki WebMatrix ve ASP.NET Web Sayfaları forumu