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:

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.netgibi smtp.provider.com bir addır. Ancak, sitenizi bir barındırma sağlayıcısında yayımlarsanız, bu noktada SMTP sunucu adı olabilir localhost. 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.EnableSsltrue.

E-posta gönderirken bir hata varsa, aşağıdakine benzer bir standart ASP.NET hata iletisi görebilirsiniz:

E-postayla ilgili bir sorun olduğunda hata iletisi ASP.NET

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-nameuygun 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ğerinin To 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