Bagikan melalui


Bagian 10, periksa metode Detail dan Hapus aplikasi ASP.NET Core

Catatan

Ini bukan versi terbaru dari artikel ini. Untuk rilis saat ini, lihat versi .NET 10 dari artikel ini.

Peringatan

Versi ASP.NET Core ini tidak lagi didukung. Untuk informasi selengkapnya, lihat Kebijakan Dukungan .NET dan .NET Core. Untuk rilis saat ini, lihat versi .NET 9 dari artikel ini.

Oleh Rick Anderson

Buka pengontrol Film dan periksa metode :Details

// GET: Movies/Details/5
public async Task<IActionResult> Details(int? id)
{
    if (id == null)
    {
        return NotFound();
    }

    var movie = await _context.Movie
        .FirstOrDefaultAsync(m => m.Id == id);
    if (movie == null)
    {
        return NotFound();
    }

    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 permintaan GET dengan tiga segmen URL, Movies pengontrol, Details metode, dan id nilai. Ingat segmen-segmen ini didefinisikan dalam Program.cs.

app.MapControllerRoute(
    name: "default",
    pattern: "{controller=Home}/{action=Index}/{id?}");

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

Periksa Delete metode dan DeleteConfirmed .

// GET: Movies/Delete/5
public async Task<IActionResult> Delete(int? id)
{

    if (id == null)
    {
        return NotFound();
    }

    var movie = await _context.Movie
        .FirstOrDefaultAsync(m => m.Id == id);
    if (movie == null)
    {
        return NotFound();
    }

    return View(movie);
}

// POST: Movies/Delete/5
[HttpPost, ActionName("Delete")]
[ValidateAntiForgeryToken]
public async Task<IActionResult> DeleteConfirmed(int id)
{
    var movie = await _context.Movie.FindAsync(id);
    if (movie != null)
    {
        _context.Movie.Remove(movie);
    }

    await _context.SaveChangesAsync();
    return RedirectToAction(nameof(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 async Task<IActionResult> Delete(int? id)
{
// POST: Movies/Delete/5
[HttpPost, ActionName("Delete")]
[ValidateAntiForgeryToken]
public async Task<IActionResult> 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 Delete metode -- satu untuk GET dan satu untuk POST -- yang keduanya memiliki tanda tangan parameter yang sama. (Keduanya perlu menerima bilangan bulat tunggal sebagai parameter.)

Ada dua pendekatan untuk masalah ini, 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 . Atribut tersebut melakukan pemetaan untuk sistem perutean sehingga URL yang menyertakan /Delete/ untuk permintaan POST akan menemukan DeleteConfirmed metode .

Pekerjaan umum lainnya untuk metode yang memiliki nama dan tanda tangan yang identik adalah mengubah tanda tangan metode POST secara artifisial untuk menyertakan parameter tambahan (tidak digunakan). Itulah yang kami lakukan di posting sebelumnya ketika kami menambahkan notUsed parameter . Anda dapat melakukan hal yang sama di sini untuk metode :[HttpPost] Delete

// POST: Movies/Delete/6
[HttpPost]
[ValidateAntiForgeryToken]
public async Task<IActionResult> Delete(int id, bool notUsed)

Menerbitkan ke Azure

Untuk informasi tentang penyebaran ke Azure, lihat Tutorial: Membangun aplikasi ASP.NET Core dan SQL Database di Azure App Service.

Pola aplikasi web perusahaan

Untuk panduan tentang membuat aplikasi ASP.NET Core yang andal, aman, berkinerja, dapat diuji, dan dapat diskalakan, lihat pola aplikasi web Enterprise. Sampel aplikasi web berkualitas produksi yang lengkap dan mengimplementasikan pola tersebut tersedia.

Buka pengontrol Film dan periksa metode :Details

// GET: Movies/Details/5
public async Task<IActionResult> Details(int? id)
{
    if (id == null)
    {
        return NotFound();
    }

    var movie = await _context.Movie
        .FirstOrDefaultAsync(m => m.Id == id);
    if (movie == null)
    {
        return NotFound();
    }

    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 permintaan GET dengan tiga segmen URL, Movies pengontrol, Details metode, dan id nilai. Ingat segmen-segmen ini didefinisikan dalam Program.cs.

app.MapControllerRoute(
    name: "default",
    pattern: "{controller=Home}/{action=Index}/{id?}");

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

Periksa Delete metode dan DeleteConfirmed .

// GET: Movies/Delete/5
public async Task<IActionResult> Delete(int? id)
{

    if (id == null)
    {
        return NotFound();
    }

    var movie = await _context.Movie
        .FirstOrDefaultAsync(m => m.Id == id);
    if (movie == null)
    {
        return NotFound();
    }

    return View(movie);
}

// POST: Movies/Delete/5
[HttpPost, ActionName("Delete")]
[ValidateAntiForgeryToken]
public async Task<IActionResult> DeleteConfirmed(int id)
{
    var movie = await _context.Movie.FindAsync(id);
    if (movie != null)
    {
        _context.Movie.Remove(movie);
    }

    await _context.SaveChangesAsync();
    return RedirectToAction(nameof(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 async Task<IActionResult> Delete(int? id)
{
// POST: Movies/Delete/5
[HttpPost, ActionName("Delete")]
[ValidateAntiForgeryToken]
public async Task<IActionResult> 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 Delete metode -- satu untuk GET dan satu untuk POST -- yang keduanya memiliki tanda tangan parameter yang sama. (Keduanya perlu menerima bilangan bulat tunggal sebagai parameter.)

Ada dua pendekatan untuk masalah ini, 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 . Atribut tersebut melakukan pemetaan untuk sistem perutean sehingga URL yang menyertakan /Delete/ untuk permintaan POST akan menemukan DeleteConfirmed metode .

Pekerjaan umum lainnya untuk metode yang memiliki nama dan tanda tangan yang identik adalah mengubah tanda tangan metode POST secara artifisial untuk menyertakan parameter tambahan (tidak digunakan). Itulah yang kami lakukan di posting sebelumnya ketika kami menambahkan notUsed parameter . Anda dapat melakukan hal yang sama di sini untuk metode :[HttpPost] Delete

// POST: Movies/Delete/6
[HttpPost]
[ValidateAntiForgeryToken]
public async Task<IActionResult> Delete(int id, bool notUsed)

Menerbitkan ke Azure

Untuk informasi tentang penyebaran ke Azure, lihat Tutorial: Membangun aplikasi ASP.NET Core dan SQL Database di Azure App Service.

Pola aplikasi web perusahaan

Untuk panduan tentang membuat aplikasi ASP.NET Core yang andal, aman, berkinerja, dapat diuji, dan dapat diskalakan, lihat pola aplikasi web Enterprise. Sampel aplikasi web berkualitas produksi yang lengkap dan mengimplementasikan pola tersebut tersedia.

Buka pengontrol Film dan periksa metode :Details

// GET: Movies/Details/5
public async Task<IActionResult> Details(int? id)
{
    if (id == null)
    {
        return NotFound();
    }

    var movie = await _context.Movie
        .FirstOrDefaultAsync(m => m.Id == id);
    if (movie == null)
    {
        return NotFound();
    }

    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 permintaan GET dengan tiga segmen URL, Movies pengontrol, Details metode, dan id nilai. Ingat segmen-segmen ini didefinisikan dalam Program.cs.

app.MapControllerRoute(
    name: "default",
    pattern: "{controller=Home}/{action=Index}/{id?}");

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

Periksa Delete metode dan DeleteConfirmed .

// GET: Movies/Delete/5
public async Task<IActionResult> Delete(int? id)
{

    if (id == null)
    {
        return NotFound();
    }

    var movie = await _context.Movie
        .FirstOrDefaultAsync(m => m.Id == id);
    if (movie == null)
    {
        return NotFound();
    }

    return View(movie);
}

// POST: Movies/Delete/5
[HttpPost, ActionName("Delete")]
[ValidateAntiForgeryToken]
public async Task<IActionResult> DeleteConfirmed(int id)
{
    var movie = await _context.Movie.FindAsync(id);
    if (movie != null)
    {
        _context.Movie.Remove(movie);
    }

    await _context.SaveChangesAsync();
    return RedirectToAction(nameof(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 async Task<IActionResult> Delete(int? id)
{
// POST: Movies/Delete/5
[HttpPost, ActionName("Delete")]
[ValidateAntiForgeryToken]
public async Task<IActionResult> 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 Delete metode -- satu untuk GET dan satu untuk POST -- yang keduanya memiliki tanda tangan parameter yang sama. (Keduanya perlu menerima bilangan bulat tunggal sebagai parameter.)

Ada dua pendekatan untuk masalah ini, 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 . Atribut tersebut melakukan pemetaan untuk sistem perutean sehingga URL yang menyertakan /Delete/ untuk permintaan POST akan menemukan DeleteConfirmed metode .

Pekerjaan umum lainnya untuk metode yang memiliki nama dan tanda tangan yang identik adalah mengubah tanda tangan metode POST secara artifisial untuk menyertakan parameter tambahan (tidak digunakan). Itulah yang kami lakukan di posting sebelumnya ketika kami menambahkan notUsed parameter . Anda dapat melakukan hal yang sama di sini untuk metode :[HttpPost] Delete

// POST: Movies/Delete/6
[HttpPost]
[ValidateAntiForgeryToken]
public async Task<IActionResult> Delete(int id, bool notUsed)

Menerbitkan ke Azure

Untuk informasi tentang penyebaran ke Azure, lihat Tutorial: Membangun aplikasi ASP.NET Core dan SQL Database di Azure App Service.

Buka pengontrol Film dan periksa metode :Details

// GET: Movies/Details/5
public async Task<IActionResult> Details(int? id)
{
    if (id == null)
    {
        return NotFound();
    }

    var movie = await _context.Movie
        .FirstOrDefaultAsync(m => m.Id == id);
    if (movie == null)
    {
        return NotFound();
    }

    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 permintaan GET dengan tiga segmen URL, Movies pengontrol, Details metode, dan id nilai. Ingat segmen-segmen ini didefinisikan dalam Program.cs.

app.MapControllerRoute(
    name: "default",
    pattern: "{controller=Home}/{action=Index}/{id?}");

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

Periksa Delete metode dan DeleteConfirmed .

// GET: Movies/Delete/5
public async Task<IActionResult> Delete(int? id)
{
    if (id == null)
    {
        return NotFound();
    }

    var movie = await _context.Movie
        .FirstOrDefaultAsync(m => m.Id == id);
    if (movie == null)
    {
        return NotFound();
    }

    return View(movie);
}

// POST: Movies/Delete/5
[HttpPost, ActionName("Delete")]
[ValidateAntiForgeryToken]
public async Task<IActionResult> DeleteConfirmed(int id)
{
    var movie = await _context.Movie.FindAsync(id);
    _context.Movie.Remove(movie);
    await _context.SaveChangesAsync();
    return RedirectToAction(nameof(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 async Task<IActionResult> Delete(int? id)
{
// POST: Movies/Delete/5
[HttpPost, ActionName("Delete")]
[ValidateAntiForgeryToken]
public async Task<IActionResult> 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 Delete metode -- satu untuk GET dan satu untuk POST -- yang keduanya memiliki tanda tangan parameter yang sama. (Keduanya perlu menerima bilangan bulat tunggal sebagai parameter.)

Ada dua pendekatan untuk masalah ini, 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 . Atribut tersebut melakukan pemetaan untuk sistem perutean sehingga URL yang menyertakan /Delete/ untuk permintaan POST akan menemukan DeleteConfirmed metode .

Pekerjaan umum lainnya untuk metode yang memiliki nama dan tanda tangan yang identik adalah mengubah tanda tangan metode POST secara artifisial untuk menyertakan parameter tambahan (tidak digunakan). Itulah yang kami lakukan di posting sebelumnya ketika kami menambahkan notUsed parameter . Anda dapat melakukan hal yang sama di sini untuk metode :[HttpPost] Delete

// POST: Movies/Delete/6
[HttpPost]
[ValidateAntiForgeryToken]
public async Task<IActionResult> Delete(int id, bool notUsed)

Menerbitkan ke Azure

Untuk informasi tentang penyebaran ke Azure, lihat Tutorial: Membangun aplikasi ASP.NET Core dan SQL Database di Azure App Service.

Buka pengontrol Film dan periksa metode :Details

// GET: Movies/Details/5
public async Task<IActionResult> Details(int? id)
{
    if (id == null)
    {
        return NotFound();
    }

    var movie = await _context.Movie
        .FirstOrDefaultAsync(m => m.Id == id);
    if (movie == null)
    {
        return NotFound();
    }

    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 permintaan GET dengan tiga segmen URL, Movies pengontrol, Details metode, dan id nilai. Ingat segmen-segmen ini didefinisikan dalam Startup.cs.

app.UseEndpoints(endpoints =>
{
    endpoints.MapControllerRoute(
        name: "default",
        pattern: "{controller=Home}/{action=Index}/{id?}");
});

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

Periksa Delete metode dan DeleteConfirmed .

// GET: Movies/Delete/5
public async Task<IActionResult> Delete(int? id)
{
    if (id == null)
    {
        return NotFound();
    }

    var movie = await _context.Movie
        .FirstOrDefaultAsync(m => m.Id == id);
    if (movie == null)
    {
        return NotFound();
    }

    return View(movie);
}

// POST: Movies/Delete/5
[HttpPost, ActionName("Delete")]
[ValidateAntiForgeryToken]
public async Task<IActionResult> DeleteConfirmed(int id)
{
    var movie = await _context.Movie.FindAsync(id);
    _context.Movie.Remove(movie);
    await _context.SaveChangesAsync();
    return RedirectToAction(nameof(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 async Task<IActionResult> Delete(int? id)
{
// POST: Movies/Delete/5
[HttpPost, ActionName("Delete")]
[ValidateAntiForgeryToken]
public async Task<IActionResult> 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 Delete metode -- satu untuk GET dan satu untuk POST -- yang keduanya memiliki tanda tangan parameter yang sama. (Keduanya perlu menerima bilangan bulat tunggal sebagai parameter.)

Ada dua pendekatan untuk masalah ini, 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 . Atribut tersebut melakukan pemetaan untuk sistem perutean sehingga URL yang menyertakan /Delete/ untuk permintaan POST akan menemukan DeleteConfirmed metode .

Pekerjaan umum lainnya untuk metode yang memiliki nama dan tanda tangan yang identik adalah mengubah tanda tangan metode POST secara artifisial untuk menyertakan parameter tambahan (tidak digunakan). Itulah yang kami lakukan di posting sebelumnya ketika kami menambahkan notUsed parameter . Anda dapat melakukan hal yang sama di sini untuk metode :[HttpPost] Delete

// POST: Movies/Delete/6
[HttpPost]
[ValidateAntiForgeryToken]
public async Task<IActionResult> Delete(int id, bool notUsed)

Menerbitkan ke Azure

Untuk informasi tentang penyebaran ke Azure, lihat Tutorial: Membangun aplikasi ASP.NET Core dan SQL Database di Azure App Service.