Bagikan melalui


Memeriksa Detail dan Menghapus Metode Tindakan

oleh Rick Anderson

Catatan

Versi terbaru dari tutorial ini tersedia di sini yang menggunakan ASP.NET MVC 5 dan Visual Studio 2013. Lebih aman, jauh lebih mudah untuk diikuti dan menunjukkan lebih banyak fitur.

Di bagian tutorial ini, Anda akan memeriksa metode dan Delete yang dihasilkan Details secara otomatis.

Memeriksa Detail dan Menghapus Metode

Movie Buka pengontrol dan periksa Details metode .

Cuplikan layar yang memperlihatkan tab Movies Controller dot c s. Detail dipilih di menu drop-down di sebelah kanan.

public ActionResult Details(int? id)
{
    if (id == null)
    {
        return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
    }
    Movie movie = db.Movies.Find(id);
    if (movie == null)
    {
        return HttpNotFound();
    }
    return View(movie);
}

Mesin perancah MVC yang membuat metode tindakan ini menambahkan komentar yang menunjukkan permintaan HTTP yang memanggil metode . Dalam hal ini, ini adalah GET permintaan dengan tiga segmen URL, Movies pengontrol, metode, Details dan ID nilai.

Code First memudahkan pencarian data menggunakan Find metode . Fitur keamanan penting yang disertakan dalam metode ini adalah bahwa kode memverifikasi bahwa Find metode telah menemukan film sebelum kode mencoba melakukan apa pun dengannya. Misalnya, peretas dapat memperkenalkan kesalahan ke situs dengan mengubah URL yang dibuat oleh tautan dari http://localhost:xxxx/Movies/Details/1 ke sesuatu seperti http://localhost:xxxx/Movies/Details/12345 (atau beberapa nilai lain yang tidak mewakili film aktual). Jika Anda tidak memeriksa film null, film null akan mengakibatkan kesalahan database.

Periksa Delete metode dan DeleteConfirmed .

// GET: /Movies/Delete/5
public ActionResult Delete(int? id)
{
    if (id == null)
    {
        return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
    }
    Movie movie = db.Movies.Find(id);
    if (movie == null)
    {
        return HttpNotFound();
    }
    return View(movie);
}

// POST: /Movies/Delete/5
[HttpPost, ActionName("Delete")]
[ValidateAntiForgeryToken]
public ActionResult DeleteConfirmed(int id)
{
    Movie movie = db.Movies.Find(id);
    db.Movies.Remove(movie);
    db.SaveChanges();
    return RedirectToAction("Index");
}

Perhatikan bahwa HTTP Get``Delete metode tidak menghapus film yang ditentukan, metode mengembalikan tampilan film tempat Anda dapat mengirimkan (HttpPost) penghapusan. Melakukan operasi penghapusan sebagai respons terhadap permintaan GET (atau untuk hal itu, melakukan operasi edit, membuat operasi, atau operasi lain yang mengubah data) membuka lubang keamanan.

Metode HttpPost yang menghapus data diberi nama DeleteConfirmed untuk memberi metode HTTP POST tanda tangan atau nama yang unik. Dua tanda tangan metode ditunjukkan di bawah ini:

// GET: /Movies/Delete/5
public ActionResult Delete(int? id)

//
// POST: /Movies/Delete/5
[HttpPost, ActionName("Delete")]
public ActionResult DeleteConfirmed(int id)

Runtime bahasa umum (CLR) memerlukan metode kelebihan beban untuk memiliki tanda tangan parameter unik (nama metode yang sama tetapi daftar parameter yang berbeda). Namun, di sini Anda memerlukan dua metode Hapus -- satu untuk GET dan satu untuk POST -- yang keduanya memiliki tanda tangan parameter yang sama. (Keduanya perlu menerima bilangan bulat tunggal sebagai parameter.)

Untuk mengatasinya, Anda dapat melakukan beberapa hal. Salah satunya adalah memberikan metode nama yang berbeda. Itulah yang dilakukan mekanisme perancah dalam contoh sebelumnya. Namun, ini memperkenalkan masalah kecil: ASP.NET memetakan segmen URL ke metode tindakan berdasarkan nama, dan jika Anda mengganti nama metode, perutean biasanya tidak akan dapat menemukan metode tersebut. Solusinya adalah apa yang Anda lihat dalam contoh, yaitu menambahkan ActionName("Delete") atribut ke DeleteConfirmed metode . Ini secara efektif melakukan pemetaan untuk sistem perutean sehingga URL yang menyertakan /Delete/untuk permintaan POST akan menemukan DeleteConfirmed metode .

Cara umum lainnya untuk menghindari masalah dengan metode yang memiliki nama dan tanda tangan yang identik adalah dengan mengubah tanda tangan metode POST secara artifisial untuk menyertakan parameter yang tidak digunakan. Misalnya, beberapa pengembang menambahkan jenis FormCollection parameter yang diteruskan ke metode POST, dan kemudian tidak menggunakan parameter :

public ActionResult Delete(FormCollection fcNotUsed, int id = 0)
{
    Movie movie = db.Movies.Find(id);
    if (movie == null)
    {
        return HttpNotFound();
    }
    db.Movies.Remove(movie);
    db.SaveChanges();
    return RedirectToAction("Index");
}

Ringkasan

Anda sekarang memiliki aplikasi MVC ASP.NET lengkap yang menyimpan data dalam database DB lokal. Anda dapat membuat, membaca, memperbarui, menghapus, dan mencari film.

Cuplikan layar yang memperlihatkan halaman Indeks Pencarian Film M V C.

Langkah berikutnya

Setelah Anda membangun dan menguji aplikasi web, langkah selanjutnya adalah membuatnya tersedia bagi orang lain untuk digunakan melalui Internet. Untuk melakukannya, Anda harus menyebarkannya ke penyedia hosting web. Microsoft menawarkan hosting web gratis hingga 10 situs web di akun uji coba Windows Azure gratis. Saya sarankan Anda berikutnya mengikuti tutorial Saya Menyebarkan aplikasi MVC ASP.NET Aman dengan Keanggotaan, OAuth, dan SQL Database ke Situs Web Windows Azure. Tutorial yang sangat baik adalah Membuat Model Data Kerangka Kerja Entitas tingkat menengah Tom Dykstra untuk Aplikasi MVC ASP.NET. Stackoverflow dan forum MVC ASP.NET adalah tempat yang bagus untuk mengajukan pertanyaan. Ikuti saya di twitter sehingga Anda bisa mendapatkan pembaruan pada tutorial terbaru saya.

Umpan balik dipersilakan.

Twitter Rick Anderson : @RickAndMSFT
Twitter Scott Hanselman : @shanselman