Bagikan melalui


Panduan Pemecahan Masalah ASP.NET Web Pages (Razor)

oleh Tom FitzMacken

Artikel ini menjelaskan masalah yang mungkin Anda miliki saat bekerja dengan ASP.NET Web Pages (Razor) dan beberapa solusi yang disarankan.

Versi perangkat lunak

  • Halaman Web ASP.NET (Razor) 3

Tutorial ini juga berfungsi dengan ASP.NET Web Pages 2 dan ASP.NET Web Pages 1.0.

Topik ini berisi bagian berikut:

Untuk pertanyaan umum, lihat FAQ ASP.NET Web Pages (Razor).

Masalah dengan Halaman Yang Sedang Berjalan

Berbagai masalah dapat mencegah halaman .cshtml dan .vbhtml berjalan dengan benar. Bagian ini mencantumkan pesan kesalahan umum dan kemungkinan penyebabnya.

Kesalahan HTTP 403 - Terlarang: Akses ditolak

Anda tidak memiliki izin untuk melihat direktori atau halaman ini menggunakan kredensial yang Anda berikan.

Kesalahan ini dapat terjadi jika server tidak menjalankan versi .NET Framework yang benar. Pastikan bahwa komputer yang menjalankan server (secara lokal atau jarak jauh) setidaknya telah menginstal .NET Framework 4. Pastikan juga bahwa aplikasi itu sendiri dikonfigurasi untuk menjalankan versi yang tepat.

Jika Anda melihat masalah ini secara lokal saat bekerja di WebMatrix, klik ruang kerja Situs , lalu di tampilan pohon klik Pengaturan. Di daftar Pilih versi .NET Framework, pilih .NET 4 (Terintegrasi). Jika versi ini sudah diatur, coba jalankan WebMatrix sebagai administrator.

Pastikan bahwa akar situs web Anda memiliki setidaknya satu file .cshtml di dalamnya.

Jika Anda melihat kesalahan ini ketika server web berada di server jarak jauh, hubungi administrator server. Pastikan server telah menginstal .NET Framework 4 atau yang lebih baru. Pastikan juga bahwa aplikasi berjalan di kumpulan aplikasi yang dikonfigurasi untuk menggunakan versi the.NET Framework tersebut.

Jika Anda memiliki kontrol atas server, pastikan server menjalankan versi .NET Framework yang benar. Anda mungkin juga mencoba memperbaiki penginstalan dengan menjalankan aspnet_regiis -iru perintah . (Misalnya, jika Anda menginstal IIS setelah menginstal .NET Framework, IIS tidak akan dikonfigurasi dengan benar untuk menjalankan halaman ASP.NET.) Untuk informasi selengkapnya, lihat Alat Pendaftaran IIS ASP.NET (Aspnet_regiis.exe).

Kesalahan HTTP 403.14 - Terlarang

Server Web dikonfigurasi untuk tidak mencantumkan isi direktori ini.

Kesalahan ini dapat terjadi jika Anda meminta sumber daya yang dilindungi (seperti file Web.config ) atau yang ada di folder yang dilindungi (seperti App_Data atau App_Code).

Kesalahan HTTP 404.17 - Tidak Ditemukan

Konten yang diminta tampaknya skrip dan tidak akan dilayani oleh handler file statis.

Kesalahan ini dapat terjadi jika server tidak dikonfigurasi dengan benar untuk menggunakan .NET Framework 4 atau yang lebih baru, dan karena itu tidak mengenali kode dalam @{ } blok. Lihat deskripsi sebelumnya untuk Kesalahan HTTP 403 - Terlarang: Akses ditolak.

Kesalahan HTTP 404.7 - Tidak Ditemukan

Modul pemfilteran permintaan dikonfigurasi untuk menolak ekstensi file

Kesalahan ini dapat terjadi jika ekstensi .cshtml atau .vbhtml telah diblokir secara eksplisit di server. Gejala dari masalah ini adalah BAHWA URL berfungsi ketika URL tidak menyertakan ekstensi, tetapi URL yang menyertakan .cshtml atau .vbhtml tidak berfungsi. Solusi yang mungkin adalah mengaktifkan kembali ekstensi dalam file Web.config situs. Contoh berikut menunjukkan cara mengaktifkan ekstensi .cshtml .

<system.webServer>
  <security>
   <requestFiltering>
     <fileExtensions>
       <remove fileExtension=".cshtml" />
       <add fileExtension=".cshtml" allowed="true" />
     </fileExtensions>
    </requestFiltering>
  </security>
</system.webServer>

Kesalahan HTTP 404.8 - Tidak Ditemukan

Modul pemfilteran permintaan dikonfigurasi untuk menolak jalur di URL yang berisi bagian hiddenSegment.

Kesalahan ini dapat terjadi jika Anda meminta sumber daya yang dilindungi (seperti file Web.config ) atau yang ada di folder yang dilindungi (seperti App_Data atau App_Code).

Tipe halaman ini tidak dilayani (Kesalahan Server dalam Aplikasi '/')

Lihat deskripsi sebelumnya untuk Kesalahan HTTP 404.17.

Masalah dengan kode Razor

Nama 'kelas' tidak ada dalam konteks saat ini

Seringkali, alasan Anda melihat kesalahan ini adalah bahwa class mereferensikan pembantu, tetapi pembantu tidak diinstal. Misalnya, jika Anda mencoba menggunakan pembantu, tetapi jika Anda belum menginstal paket dari NuGet, Anda akan melihat kesalahan ini. Gunakan Galeri di WebMatrix untuk menemukan dan menginstal pembantu.

Jika pembantu diinstal, tetapi halaman masih tidak mengenalinya, coba tambahkan using pernyataan ke kode. using Dalam pernyataan , referensikan namespace layanan yang menyertakan pembantu. Misalnya, pembantu dasar yang ada dalam paket ASP.NET Web Helpers ada di System.Web.Helpers namespace. Di bagian atas halaman tempat Anda ingin menggunakan pembantu, tambahkan baris ini:

@using Microsoft.Web.Helpers;

Masalah dengan Keamanan dan Keanggotaan

Jika Anda menggunakan sistem keamanan (keanggotaan) bawaan di ASP.NET Web Pages (Razor), Anda mungkin mengalami masalah berikut.

Untuk memanggil metode ini, properti "Membership.Provider" harus berupa instans "ExtendedMembershipProvider"

Kesalahan ini dapat menunjukkan bahwa tidak ada AspNetSqlMembershipProvider kelas yang dikonfigurasi. (Gejalanya adalah bahwa situs berfungsi dengan baik secara lokal tetapi melemparkan kesalahan ini ketika Anda menerbitkannya ke server penyedia hosting.) Salah satu perbaikan untuk masalah ini adalah mengaktifkan keanggotaan sederhana secara eksplisit dengan menambahkan yang berikut ini ke file Web.config situs:

<configuration>

  <!-- other setting -->

  <appSettings>
    <add key="enableSimpleMembership" value="true" />
  </appSettings>

  <!-- other settings -->

</configuration>

Masalah dengan Mengirim Email

Masalah dalam mengirim email dapat menjadi tantangan untuk debug. Masalah awalnya adalah Anda tidak dapat tersambung ke server SMTP. Jika koneksi berhasil, ASP.NET menyerahkan pesan ke server SMTP. Namun, mungkin ada masalah dengan pesan itu sendiri yang mencegah server SMTP mengirimkannya.

Jika aplikasi Anda tidak berhasil mengirim email, cobalah hal berikut:

  • Nama server SMTP seringkali seperti smtp.provider.com atau smtp.provider.net. Namun, jika Anda menerbitkan situs Anda ke penyedia hosting, nama server SMTP pada saat itu mungkin localhost. Situasi ini terjadi karena setelah Anda menerbitkan dan situs Anda berjalan di server penyedia, server SMTP mungkin lokal dari perspektif aplikasi Anda. Perubahan nama server ini mungkin berarti Anda harus mengubah nama server SMTP sebagai bagian dari proses penerbitan Anda.
  • Nomor port biasanya 25. Namun, beberapa penyedia mengharuskan Anda menggunakan port 587 atau beberapa port lainnya. Tanyakan kepada pemilik server SMTP nomor port apa yang mereka harapkan untuk Anda gunakan.
  • Pastikan Anda menggunakan kredensial yang tepat. Jika Anda telah menerbitkan situs Anda ke penyedia hosting, gunakan kredensial yang ditunjukkan secara khusus oleh penyedia adalah untuk email. Kredensial ini mungkin berbeda dari kredensial yang Anda gunakan untuk menerbitkan.
  • Terkadang Anda tidak memerlukan kredensial sama sekali. Jika Anda mengirim email dengan menggunakan ISP pribadi, penyedia email Anda mungkin sudah mengetahui kredensial Anda. Setelah menerbitkan, Anda mungkin perlu menggunakan kredensial yang berbeda dari saat menguji di komputer lokal Anda.
  • Jika penyedia email Anda menggunakan enkripsi, atur WebMail.EnableSsl ke true.

Jika ada kesalahan saat mengirim email, Anda mungkin melihat pesan kesalahan ASP.NET standar, yang terlihat seperti ini:

ASP.NET pesan kesalahan ketika ada masalah dengan email

Anda juga dapat men-debug masalah dengan mengirim email dengan menggunakan try-catch blok, seperti dalam contoh berikut. Saat Anda menggunakan try-catch blokir, ASP.NET tidak menampilkan pesan kesalahan standarnya. Sebagai gantinya, Anda dapat menangkap kesalahan di catch bagian blok.

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

Ganti nilai yang sesuai untuk your-SMTP-server-name, dan sebagainya. Beberapa pesan kesalahan yang mungkin Anda lihat dengan cara ini meliputi yang berikut ini:

  • Gagal mengirim surat.

    -atau-

    Upaya koneksi gagal karena pihak yang terhubung tidak merespons dengan benar setelah jangka waktu tertentu, atau koneksi yang dibuat gagal karena host yang terhubung gagal merespons

    Kesalahan ini biasanya berarti bahwa aplikasi tidak dapat tersambung ke server SMTP. Periksa nama server dan nomor port.

  • Kotak surat tidak tersedia. Respons server adalah: 5.1.0 <someuser@invaliddomain> pengirim ditolak : domain pengirim tidak valid

    Pesan ini dapat menunjukkan bahwa From alamat tidak benar atau hilang.

  • String yang ditentukan tidak dalam formulir yang diperlukan untuk alamat email.

    Kesalahan ini mungkin menunjukkan bahwa nilai To properti atau From tidak dikenali sebagai alamat email. (ASP.NET tidak dapat memeriksa apakah alamat email valid, hanya alamat email dalam format yang benar, seperti name@domain.com.)

Catatan

Hapus markup yang menampilkan kesalahan (@errorMessage) sebelum Anda menerbitkan halaman ke situs langsung. Ini bukan ide yang baik untuk membiarkan pengguna melihat pesan kesalahan yang Anda dapatkan dari server.

Sumber Daya Tambahan

Tanya Jawab Umum ASP.NET Web Pages (Razor)

Forum WebMatrix dan halaman web ASP.NET di situs web ASP.NET