Zkoumání podrobností a metod akcí odstranění
Poznámka:
Aktualizovaná verze tohoto kurzu je k dispozici zde , která používá ASP.NET MVC 5 a Visual Studio 2013. Je bezpečnější, mnohem jednodušší sledovat a demonstrovat další funkce.
V této části kurzu prozkoumáte automaticky generované Details
metody a Delete
metody.
Zkoumání metod Details a Delete
Movie
Otevřete kontroler a prozkoumejte metoduDetails
.
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);
}
Modul generování uživatelského rozhraní MVC, který vytvořil tuto metodu akce, přidá komentář zobrazující požadavek HTTP, který vyvolá metodu. V tomto případě se jedná o GET
požadavek se třemi segmenty adresy URL, Movies
kontrolerem, metodou Details
ID
a hodnotou.
Code First usnadňuje vyhledávání dat pomocí Find
metody. Důležitou bezpečnostní funkcí integrovanou do metody je, že kód ověří, že Find
metoda našla film před tím, než se s ním kód pokusí něco udělat. Hacker může například na web zavést chyby změnou adresy URL vytvořené odkazy na http://localhost:xxxx/Movies/Details/1
něco podobného http://localhost:xxxx/Movies/Details/12345
(nebo jinou hodnotu, která nepředstavuje skutečný film). Pokud jste nekontrolovali film s hodnotou null, výsledkem by byla chyba databáze.
Prozkoumejte metody Delete
a DeleteConfirmed
metody.
// 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");
}
Všimněte si, že HTTP Get``Delete
metoda neodstraní zadaný film, vrátí zobrazení videa, kde můžete odeslat (HttpPost
) odstranění. Provedení operace odstranění v reakci na požadavek GET (nebo v takovém případě, provedení operace úprav, operace vytvoření nebo jakákoli jiná operace, která mění data) otevře bezpečnostní díru.
Metoda HttpPost
, která odstraní data, je pojmenovaná DeleteConfirmed
tak, aby metodě HTTP POST poskytla jedinečný podpis nebo název. Níže jsou uvedeny dva podpisy metody:
// GET: /Movies/Delete/5
public ActionResult Delete(int? id)
//
// POST: /Movies/Delete/5
[HttpPost, ActionName("Delete")]
public ActionResult DeleteConfirmed(int id)
Modul CLR (Common Language Runtime) vyžaduje, aby přetížené metody měly jedinečný podpis parametru (stejný název metody, ale jiný seznam parametrů). Tady ale potřebujete dvě metody Delete – jednu pro GET a druhou pro POST – které mají stejný podpis parametru. (Oba musí jako parametr přijmout jedno celé číslo.)
Pokud to chcete vyřešit, můžete udělat několik věcí. Jedním z nich je dát metodám různé názvy. To je to, co mechanismus generování uživatelského rozhraní udělal v předchozím příkladu. To ale představuje malý problém: ASP.NET mapuje segmenty adresy URL na metody akcí podle názvu a pokud metodu přejmenujete, směrování obvykle by tuto metodu nemohlo najít. Řešení je to, co vidíte v příkladu, což je přidání ActionName("Delete")
atributu do DeleteConfirmed
metody. To efektivně provádí mapování pro směrovací systém tak, aby adresa URL, která obsahuje /Delete/pro požadavek POST, našla metodu DeleteConfirmed
.
Dalším běžným způsobem, jak se vyhnout potížím s metodami, které mají identické názvy a podpisy, je uměle změnit podpis metody POST tak, aby zahrnoval nepoužívaný parametr. Někteří vývojáři například přidají typ FormCollection
parametru předaný metodě POST a pak tento parametr jednoduše nepoužívají:
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");
}
Shrnutí
Teď máte úplnou aplikaci ASP.NET MVC, která ukládá data do místní databáze. Můžete vytvářet, číst, aktualizovat, odstraňovat a vyhledávat filmy.
Další kroky
Po vytvoření a otestování webové aplikace je dalším krokem zpřístupnění webové aplikace jiným uživatelům, kteří ji budou používat přes internet. Abyste to mohli udělat, musíte ho nasadit na poskytovatele webového hostingu. Microsoft nabízí bezplatné webové hostování až pro 10 webů v bezplatném zkušebním účtu Windows Azure. Navrhuji vám další postup podle mého kurzu Nasazení aplikace Zabezpečené ASP.NET MVC s členstvím, OAuth a SQL Database na web Windows Azure. Skvělým kurzem je Tom Dykstra zprostředkující úroveň Vytvoření datového modelu Entity Framework pro aplikaci ASP.NET MVC. Stackoverflow a fóra ASP.NET MVC jsou skvělým místem pro kladení otázek. Sledujte mě na Twitteru, abyste mohli získat aktualizace v mých nejnovějších kurzech.
Zpětná vazba je vítána.
— Rick Anderson twitter: @RickAndMSFT
— Scott Hanselman twitter: @shanselman