Sdílet prostřednictvím


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

Rick Anderson

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 tomto kurzu se naučíte základy vytváření 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 jednotlivé požadavky nainstalovat pomocí následujících odkazů:

Pokud používáte Sadu Visual Studio 2010 místo visual web developeru 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 do verze jazyka Visual Basic tohoto kurzu.

V této části kurzu provedete některá vylepšení automaticky generovaných Details a Delete metod. Tyto změny se nevyžadují, ale jen s několika malými částmi kódu můžete aplikaci snadno vylepšit.

Vylepšení podrobností a metod odstranění

Při generování Movie kontroleru ASP.NET MVC vygenerovaný kód, který fungoval skvěle, ale dá se udělat robustnější s několika malými změnami.

Movie Otevřete kontroler a upravte metodu Details vrácením, HttpNotFound když se film nenajde. Měli byste také upravit metodu Details tak, aby nastavil výchozí hodnotu pro ID, které se mu předá. (Provedli jste podobné změny Edit metody 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 bezpečnostní funkcí, kterou jsme do metody přidali, je to, ž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 nekontrolujete video s hodnotou null, může to vést k chybě databáze.

Podobně změňte Delete a DeleteConfirmed metody 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 uvedené 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, že Delete metoda neodstraní data. 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 = 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é oba vyžadují stejný podpis. (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 jsme udělali 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 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");
}

Zabalení

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

Snímek obrazovky znázorňující stránku Index vyhledávání v aplikaci filmových filmů V M V 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. Kód Entity Framework First vytvořil databázi z datového modelu průběžně a systém generování uživatelského rozhraní ASP.NET MVC automaticky vygeneroval metody a zobrazení akcí pro základní operace CRUD. Pak jste přidali vyhledávací formulář, který uživatelům umožní prohledávat databázi. Změnili jste databázi tak, aby zahrnovala nový sloupec dat, a pak jste aktualizovali dvě stránky, aby se vytvořila a zobrazila tato nová data. Přidali jste ověření tím, že datový model označíte atributy z DataAnnotations oboru názvů. Výsledné ověřování běží na klientovi a na serveru.

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

Teď vám doporučujeme přejít na naši středně pokročilou úroveň Vytvoření datového modelu Entity Framework pro ASP.NET aplikace MVC a MVC Music Store kurzy, prozkoumat ASP.NET články na MSDN a podívat se na mnoho videí a zdrojů informací https://asp.net/mvc o ASP.NET MVC! Fóra ASP.NET MVC jsou skvělým místem pro kladení otázek.

Užijte si to!

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