Sdílet prostřednictvím


Vylepšení podrobností a metod Delete (C#)

Rick Anderson

Poznámka

Aktualizovaná verze tohoto kurzu je k dispozici tady, která používá ASP.NET MVC 5 a Visual Studio 2013. Je bezpečnější, mnohem jednodušší sledovat a ukazuje více funkcí.

V tomto kurzu se naučíte základy sestavení webové aplikace ASP.NET MVC pomocí sady Microsoft Visual Web Developer 2010 Express Service Pack 1, což je bezplatná verze sady Microsoft Visual Studio. Než začnete, ujistěte se, že jste nainstalovali níže uvedené požadavky. Všechny z nich můžete nainstalovat kliknutím na následující odkaz: Instalační program webové platformy. Případně můžete požadavky nainstalovat jednotlivě pomocí následujících odkazů:

Pokud používáte Visual Studio 2010 místo Sady Visual Web Developer 2010, nainstalujte požadované součásti kliknutím na následující odkaz: Požadavky sady Visual Studio 2010.

K tomuto tématu je k dispozici projekt Visual Web Developer se zdrojovým kódem jazyka C#. Stáhněte si verzi jazyka C#. Pokud dáváte přednost jazyku Visual Basic, přepněte na verzi Visual Basic tohoto kurzu.

V této části kurzu provedete několik vylepšení automaticky generovaných Details metod a Delete metod. Tyto změny nejsou povinné, ale pomocí několika malých bitů kódu můžete aplikaci snadno vylepšit.

Vylepšení metod Details a Delete

Když jste řadič vygenerovali Movie , ASP.NET MVC vygeneroval kód, který fungoval skvěle, ale který může být robustnější s několika malými změnami.

Movie Otevřete kontroler a upravte metodu Details tak, že se vrátíteHttpNotFound, když se film nenajde. Měli byste také upravit metodu Details tak, aby nastavil výchozí hodnotu ID, které se jí předá. (Podobné změny v metodě jste provedli Edit v části 6 tohoto kurzu.) Je však nutné změnit návratový Details typ metody z ViewResult na ActionResult, protože HttpNotFound metoda nevrací ViewResult objekt. Následující příklad ukazuje upravenou Details metodu.

public ActionResult Details(int id = 0)
{
    Movie movie = db.Movies.Find(id);
    if (movie == null)
    {
        return HttpNotFound();
    }
    return View(movie);
}

Code First usnadňuje vyhledávání dat pomocí Find metody . Důležitou funkcí zabezpečení, kterou jsme do metody zabudovali, je to, že kód ověří, že Find metoda našla film předtím, než se s ním kód pokusí něco udělat. Hacker může například do webu zavádět chyby tím, že změní adresu URL vytvořenou odkazy z http://localhost:xxxx/Movies/Details/1 na něco podobného http://localhost:xxxx/Movies/Details/12345 (nebo jinou hodnotu, která nepředstavuje skutečný film). Pokud nekontrolujete film s hodnotou null, může to mít za následek chybu databáze.

Podobně změňte Delete metody a DeleteConfirmed tak, aby určily výchozí hodnotu parametru ID a vrátily HttpNotFound se, když se film nenajde. Aktualizované Delete metody v Movie kontroleru jsou zobrazeny níže.

// GET: /Movies/Delete/5

public ActionResult Delete(int id = 0)
{
    Movie movie = db.Movies.Find(id);
    if (movie == null)
    {
        return HttpNotFound();
    }
    return View(movie);
}

//
// POST: /Movies/Delete/5

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

Všimněte si Delete , že metoda neodstraní data. Provedení operace odstranění v reakci na požadavek GET (nebo provedení operace úprav, operace vytvoření nebo jiné operace, která mění data) otevře bezpečnostní díru. Další informace o tom najdete v příspěvku na blogu Stephena Walthera ASP.NET tip MVC #46 – Nepoužívejte odstranit odkazy, protože vytvářejí bezpečnostní díry.

Metoda HttpPost , která odstraní data, má název DeleteConfirmed , aby metoda HTTP POST získala jedinečný podpis nebo název. Níže jsou uvedené dva signatury metody:

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

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

Modul CLR (Common Language Runtime) vyžaduje, aby přetížené metody měly jedinečný podpis (stejný název, jiný seznam parametrů). Tady ale potřebujete dvě metody Delete – jednu pro GET a druhou pro POST – které vyžadují stejný podpis. (Oba musí přijmout jedno celé číslo jako parametr.)

Abyste to vyřešili, můžete udělat několik věcí. Jedním z nich je dát metodám různé názvy. To jsme udělali v předchozím příkladu. To ale přináší malý problém: ASP.NET mapuje segmenty adresy URL na metody akcí podle názvu, a pokud metodu přejmenujete, směrování by normálně tuto metodu nenašlo. Řešení je to, co vidíte v příkladu, což je přidání atributu ActionName("Delete")DeleteConfirmed do metody. Tím se efektivně provede mapování pro směrovací systém tak, aby adresa URL, která obsahuje /Delete/pro požadavek POST, našla metodu DeleteConfirmed .

Dalším způsobem, jak se vyhnout problémů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řidávají typ FormCollection parametru, který se předá metodě POST, a pak 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");
}

Zabalení

Teď máte kompletní aplikaci ASP.NET MVC, která ukládá data do SQL Server Compact databáze. Filmy můžete vytvářet, číst, aktualizovat, odstraňovat a vyhledávat.

Snímek obrazovky se stránkou Index vyhledávání v aplikaci M V C Movie Na stránce se zobrazí seznam čtyř filmů.

V tomto základním kurzu jste začali vytvářet kontrolery, přidružovat je k zobrazením a předávat pevně zakódovaná data. Pak jste vytvořili a navrhli datový model. Entity Framework Code First vytvořil databázi z datového modelu za chodu a systém generování uživatelského rozhraní ASP.NET MVC automaticky vygeneroval metody akcí a zobrazení pro základní operace CRUD. Pak jste přidali vyhledávací formulář, který uživatelům umožňuje prohledávat databázi. Změnili jste databázi tak, aby obsahovala nový sloupec dat, a pak jste aktualizovali dvě stránky, abyste vytvořili a zobrazili tato nová data. Přidali jste ověření tím, že jste datový model označili atributy z DataAnnotations oboru názvů. Výsledné ověření se spustí na klientovi a na serveru.

Pokud chcete aplikaci nasadit, je vhodné ji nejprve otestovat na místním serveru SLUŽBY IIS 7. Pomocí tohoto odkazu na instalační program webové platformy můžete povolit nastavení služby IIS pro ASP.NET aplikace. Projděte si následující odkazy pro nasazení:

Nyní vám doporučuji přejít na naše kurzy vytvoření datového modelu Entity Framework pro ASP.NET aplikaci MVC a MVC Music Store , prozkoumat články o ASP.NET na WEBU MSDN a podívat se na mnoho videí a zdrojů na webu https://asp.net/mvc , kde se dozvíte ještě více o ASP.NET MVC! Fóra ASP.NET MVC jsou skvělým místem pro kladení otázek.

Užijte si ji!

— Scott Hanselman (http://hanselman.com a @shanselman na Twitteru) a Rick Anderson blogs.msdn.com/rickAndy