Otomatik Olarak Oluşturulan Ayrıntıları ve Silme Yöntemlerini inceleme
tarafından Rick Anderson
Not
Visual Studio'nun en son sürümünü kullanarak bu öğreticinin güncelleştirilmiş bir sürümüne buradan ulaşabilirsiniz. Yeni öğreticide, bu öğreticide birçok geliştirme sağlayan ASP.NET Core MVC kullanılır.
Bu öğreticide, denetleyiciler ve görünümlerle ASP.NET Core MVC öğretildi. Razor Pages, web kullanıcı arabirimi oluşturmayı daha kolay ve daha üretken hale getiren sayfa tabanlı bir programlama modeli olan ASP.NET Core'de yeni bir alternatiftir. Razor Pages öğreticisini MVC sürümünden önce denemenizi öneririz. Razor Pages öğreticisi:
- Takip etmek daha kolaydır.
- Daha fazla özelliği kapsar.
- Yeni uygulama geliştirme için tercih edilen yaklaşımdır.
Öğreticinin bu bölümünde, otomatik olarak oluşturulan Details
ve Delete
yöntemlerini inceleyeceksiniz.
Details ve Delete Metotlarını inceleme
Denetleyiciyi Movie
açın ve yöntemini inceleyin Details
.
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);
}
Bu eylem yöntemini oluşturan MVC yapı iskelesi altyapısı, yöntemini çağıran bir HTTP isteğini gösteren bir açıklama ekler. Bu durumda GET
, denetleyici, Movies
yöntem ve değer olmak üzere üç URL kesimine Details
sahip bir ID
istektir.
Code First, yöntemini kullanarak Find
veri aramayı kolaylaştırır. yönteminde yerleşik olarak bulunan önemli bir güvenlik özelliği, kodun, kodla bir şey yapmaya çalışmadan önce yöntemin bir film bulduğunu doğrulamasıdır Find
. Örneğin, bir bilgisayar korsanı bağlantılar http://localhost:xxxx/Movies/Details/1
tarafından oluşturulan URL'yi (veya gerçek bir filmi temsil etmeyen başka bir değer) olarak http://localhost:xxxx/Movies/Details/12345
değiştirerek siteye hata verebilir. Null film olup olmadığını denetlemediyseniz, null film veritabanı hatasına neden olur.
Delete
ve DeleteConfirmed
yöntemlerini inceleyin.
// 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");
}
HTTP GET Delete
yönteminin belirtilen filmi silmez, silme işlemini gönderebileceğiniz (HttpPost
) filmin bir görünümünü döndürdüğünü unutmayın. BIR GET isteğine yanıt olarak silme işlemi gerçekleştirmek (veya bu nedenle, bir düzenleme işlemi gerçekleştirmek, işlem oluşturmak veya verileri değiştiren başka bir işlem) bir güvenlik deliği açar. Bu konuda daha fazla bilgi için Bkz. Stephen Walther'ın blog girdisi ASP.NET MVC İpucu #46 — Güvenlik Açıkları oluşturdukları için Bağlantıları Sil'i kullanmayın.
Verileri HttpPost
silecek yöntem, HTTP POST yöntemine benzersiz bir imza veya ad vermek için adlandırılır DeleteConfirmed
. İki yöntem imzası aşağıda gösterilmiştir:
// GET: /Movies/Delete/5
public ActionResult Delete(int? id)
//
// POST: /Movies/Delete/5
[HttpPost, ActionName("Delete")]
public ActionResult DeleteConfirmed(int id)
Ortak dil çalışma zamanı (CLR), aşırı yüklenmiş yöntemlerin benzersiz bir parametre imzasına (aynı yöntem adı ama farklı parametre listesi) sahip olmasını gerektirir. Ancak burada biri GET ve diğeri POST için olmak üzere iki Delete yöntemi gerekir ve her ikisi de aynı parametre imzasını kullanır. (Her ikisinin de parametre olarak tek bir tamsayı kabul etmeleri gerekir.)
Bunu çözmek için birkaç şey yapabilirsiniz. Bunlardan biri, yöntemlere farklı adlar vermektir. Yapı iskelesi mekanizması önceki örnekte bunu yapmıştır. Bununla birlikte, bu küçük bir soruna neden olur: ASP.NET URL'nin segmentlerini eylem yöntemlerine ada göre eşler ve bir yöntemi yeniden adlandırırsanız yönlendirme normalde bu yöntemi bulamaz. Çözüm, örnekte gördüğünüz yönteme özniteliğini DeleteConfirmed
eklemektirActionName("Delete")
. Bu, yönlendirme sistemi için eşlemeyi etkili bir şekilde gerçekleştirir, böylece POST isteği için /Delete/ içeren bir URL yöntemini bulur DeleteConfirmed
.
Aynı adlara ve imzalara sahip yöntemlerle ilgili bir sorundan kaçınmanın bir diğer yaygın yolu, KULLANıLMAYAN bir parametreyi içerecek şekilde POST yönteminin imzasını yapay olarak değiştirmektir. Örneğin, bazı geliştiriciler POST yöntemine geçirilen bir parametre türü FormCollection
ekler ve ardından parametresini kullanmaz:
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");
}
Özet
Artık verileri yerel veritabanı veritabanında depolayan eksiksiz bir ASP.NET MVC uygulamanız var. Film oluşturabilir, okuyabilir, güncelleştirebilir, silebilir ve arama yapabilirsiniz.
Sonraki Adımlar
Bir web uygulaması oluşturup test ettikten sonra, bir sonraki adım uygulamayı İnternet üzerinden diğer kişilerin kullanımına açmaktır. Bunu yapmak için bir web barındırma sağlayıcısına dağıtmanız gerekir. Microsoft, ücretsiz bir Azure deneme hesabında en fazla 10 web sitesi için ücretsiz web barındırma hizmeti sunar. Daha sonra Öğreticimi izlemenizi öneririm. Azure'a Üyelik, OAuth ve SQL Veritabanı ile Güvenli ASP.NET MVC uygulaması dağıtma. Tom Dykstra'nın ASP.NET MVC Uygulaması için ara düzey Entity Framework Veri Modeli Oluşturma öğreticisi mükemmel bir öğreticidir. Stackoverflow ve ASP.NET MVC forumları , soru sormak için harika bir yerdir. En son öğreticilerimle ilgili güncelleştirmeleri almak için twitter'da beni takip edin.
Geri bildirim kabul edilir.
— Rick Anderson twitter: @RickAndMSFT
— Scott Hanselman twitter: @shanselman
Geri Bildirim
https://aka.ms/ContentUserFeedback.
Çok yakında: 2024 boyunca, içerik için geri bildirim mekanizması olarak GitHub Sorunları’nı kullanımdan kaldıracak ve yeni bir geri bildirim sistemiyle değiştireceğiz. Daha fazla bilgi için bkz.Gönderin ve geri bildirimi görüntüleyin