Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Poznámka:
Toto není nejnovější verze tohoto článku. Aktuální verzi najdete ve verzi .NET 10 tohoto článku.
Upozorňující
Tato verze ASP.NET Core se už nepodporuje. Další informace najdete v zásadách podpory .NET a .NET Core. Aktuální verzi najdete v tomto článku ve verzi .NET 9.
Autor: Rick Anderson
Otevřete ovladač Movie a prozkoumejte metodu 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);
}
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 požadavek GET se třemi segmenty adresy URL, Movies kontrolerem, metodou Details a id hodnotou. Vzpomeňte si, že tyto segmenty jsou definovány v Program.cs.
app.MapControllerRoute(
name: "default",
pattern: "{controller=Home}/{action=Index}/{id?}");
EF usnadňuje vyhledávání dat pomocí FirstOrDefaultAsync metody. Důležitou bezpečnostní funkcí integrovanou do metody je, že kód ověří, že vyhledávací metoda našla film předtím, než se s ní 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:{PORT}/Movies/Details/1 něco podobného http://localhost:{PORT}/Movies/Details/12345 (nebo jinou hodnotu, která nepředstavuje skutečný film). Pokud jste nekontrolovali video s hodnotou null, aplikace vyvolá výjimku.
Prozkoumejte metody Delete a DeleteConfirmed metody.
// 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));
}
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 async Task<IActionResult> Delete(int? id)
{
// POST: Movies/Delete/5
[HttpPost, ActionName("Delete")]
[ValidateAntiForgeryToken]
public async Task<IActionResult> 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ě Delete metody – jednu pro GET a druhou pro POST – které mají stejný podpis parametru. (Oba musí jako parametr přijmout jedno celé číslo.)
Existují dva přístupy k tomuto problému, jeden 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. Tento atribut provádí mapování pro směrovací systém tak, aby metoda našla DeleteConfirmed adresu URL, která obsahuje /Delete/ pro požadavek POST.
Další běžnou prací pro metody, které mají identické názvy a podpisy, je uměle změnit podpis metody POST tak, aby zahrnoval další (nepoužitý) parametr. To jsme udělali v předchozím příspěvku, když jsme přidali notUsed parametr. Pro metodu [HttpPost] Delete byste mohli udělat totéž:
// POST: Movies/Delete/6
[HttpPost]
[ValidateAntiForgeryToken]
public async Task<IActionResult> Delete(int id, bool notUsed)
Publikování do Azure
Informace o nasazení do Azure najdete v kurzu: Sestavení aplikace ASP.NET Core a SQL Database ve službě Aplikace Azure Service.
Vzory podnikových webových aplikací
Pokyny k vytvoření spolehlivé, zabezpečené, výkonné, testovatelné a škálovatelné aplikace ASP.NET Core najdete v vzorech podnikových webových aplikací. K dispozici je kompletní ukázková webová aplikace pro produkční kvalitu, která implementuje vzory.
Otevřete ovladač Movie a prozkoumejte metodu 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);
}
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 požadavek GET se třemi segmenty adresy URL, Movies kontrolerem, metodou Details a id hodnotou. Vzpomeňte si, že tyto segmenty jsou definovány v Program.cs.
app.MapControllerRoute(
name: "default",
pattern: "{controller=Home}/{action=Index}/{id?}");
EF usnadňuje vyhledávání dat pomocí FirstOrDefaultAsync metody. Důležitou bezpečnostní funkcí integrovanou do metody je, že kód ověří, že vyhledávací metoda našla film předtím, než se s ní 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:{PORT}/Movies/Details/1 něco podobného http://localhost:{PORT}/Movies/Details/12345 (nebo jinou hodnotu, která nepředstavuje skutečný film). Pokud jste nekontrolovali video s hodnotou null, aplikace vyvolá výjimku.
Prozkoumejte metody Delete a DeleteConfirmed metody.
// 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));
}
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 async Task<IActionResult> Delete(int? id)
{
// POST: Movies/Delete/5
[HttpPost, ActionName("Delete")]
[ValidateAntiForgeryToken]
public async Task<IActionResult> 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ě Delete metody – jednu pro GET a druhou pro POST – které mají stejný podpis parametru. (Oba musí jako parametr přijmout jedno celé číslo.)
Existují dva přístupy k tomuto problému, jeden 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. Tento atribut provádí mapování pro směrovací systém tak, aby metoda našla DeleteConfirmed adresu URL, která obsahuje /Delete/ pro požadavek POST.
Další běžnou prací pro metody, které mají identické názvy a podpisy, je uměle změnit podpis metody POST tak, aby zahrnoval další (nepoužitý) parametr. To jsme udělali v předchozím příspěvku, když jsme přidali notUsed parametr. Pro metodu [HttpPost] Delete byste mohli udělat totéž:
// POST: Movies/Delete/6
[HttpPost]
[ValidateAntiForgeryToken]
public async Task<IActionResult> Delete(int id, bool notUsed)
Publikování do Azure
Informace o nasazení do Azure najdete v kurzu: Sestavení aplikace ASP.NET Core a SQL Database ve službě Aplikace Azure Service.
Vzory podnikových webových aplikací
Pokyny k vytvoření spolehlivé, zabezpečené, výkonné, testovatelné a škálovatelné aplikace ASP.NET Core najdete v vzorech podnikových webových aplikací. K dispozici je kompletní ukázková webová aplikace pro produkční kvalitu, která implementuje vzory.
Otevřete ovladač Movie a prozkoumejte metodu 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);
}
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 požadavek GET se třemi segmenty adresy URL, Movies kontrolerem, metodou Details a id hodnotou. Vzpomeňte si, že tyto segmenty jsou definovány v Program.cs.
app.MapControllerRoute(
name: "default",
pattern: "{controller=Home}/{action=Index}/{id?}");
EF usnadňuje vyhledávání dat pomocí FirstOrDefaultAsync metody. Důležitou bezpečnostní funkcí integrovanou do metody je, že kód ověří, že vyhledávací metoda našla film předtím, než se s ní 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:{PORT}/Movies/Details/1 něco podobného http://localhost:{PORT}/Movies/Details/12345 (nebo jinou hodnotu, která nepředstavuje skutečný film). Pokud jste nekontrolovali video s hodnotou null, aplikace vyvolá výjimku.
Prozkoumejte metody Delete a DeleteConfirmed metody.
// 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));
}
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 async Task<IActionResult> Delete(int? id)
{
// POST: Movies/Delete/5
[HttpPost, ActionName("Delete")]
[ValidateAntiForgeryToken]
public async Task<IActionResult> 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ě Delete metody – jednu pro GET a druhou pro POST – které mají stejný podpis parametru. (Oba musí jako parametr přijmout jedno celé číslo.)
Existují dva přístupy k tomuto problému, jeden 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. Tento atribut provádí mapování pro směrovací systém tak, aby metoda našla DeleteConfirmed adresu URL, která obsahuje /Delete/ pro požadavek POST.
Další běžnou prací pro metody, které mají identické názvy a podpisy, je uměle změnit podpis metody POST tak, aby zahrnoval další (nepoužitý) parametr. To jsme udělali v předchozím příspěvku, když jsme přidali notUsed parametr. Pro metodu [HttpPost] Delete byste mohli udělat totéž:
// POST: Movies/Delete/6
[HttpPost]
[ValidateAntiForgeryToken]
public async Task<IActionResult> Delete(int id, bool notUsed)
Publikování do Azure
Informace o nasazení do Azure najdete v kurzu: Sestavení aplikace ASP.NET Core a SQL Database ve službě Aplikace Azure Service.
Otevřete ovladač Movie a prozkoumejte metodu 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);
}
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 požadavek GET se třemi segmenty adresy URL, Movies kontrolerem, metodou Details a id hodnotou. Vzpomeňte si, že tyto segmenty jsou definovány v Program.cs.
app.MapControllerRoute(
name: "default",
pattern: "{controller=Home}/{action=Index}/{id?}");
EF usnadňuje vyhledávání dat pomocí FirstOrDefaultAsync metody. Důležitou bezpečnostní funkcí integrovanou do metody je, že kód ověří, že vyhledávací metoda našla film předtím, než se s ní 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:{PORT}/Movies/Details/1 něco podobného http://localhost:{PORT}/Movies/Details/12345 (nebo jinou hodnotu, která nepředstavuje skutečný film). Pokud jste nekontrolovali video s hodnotou null, aplikace vyvolá výjimku.
Prozkoumejte metody Delete a DeleteConfirmed metody.
// 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));
}
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 async Task<IActionResult> Delete(int? id)
{
// POST: Movies/Delete/5
[HttpPost, ActionName("Delete")]
[ValidateAntiForgeryToken]
public async Task<IActionResult> 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ě Delete metody – jednu pro GET a druhou pro POST – které mají stejný podpis parametru. (Oba musí jako parametr přijmout jedno celé číslo.)
Existují dva přístupy k tomuto problému, jeden 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. Tento atribut provádí mapování pro směrovací systém tak, aby metoda našla DeleteConfirmed adresu URL, která obsahuje /Delete/ pro požadavek POST.
Další běžnou prací pro metody, které mají identické názvy a podpisy, je uměle změnit podpis metody POST tak, aby zahrnoval další (nepoužitý) parametr. To jsme udělali v předchozím příspěvku, když jsme přidali notUsed parametr. Pro metodu [HttpPost] Delete byste mohli udělat totéž:
// POST: Movies/Delete/6
[HttpPost]
[ValidateAntiForgeryToken]
public async Task<IActionResult> Delete(int id, bool notUsed)
Publikování do Azure
Informace o nasazení do Azure najdete v kurzu: Sestavení aplikace ASP.NET Core a SQL Database ve službě Aplikace Azure Service.
Otevřete ovladač Movie a prozkoumejte metodu 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);
}
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 požadavek GET se třemi segmenty adresy URL, Movies kontrolerem, metodou Details a id hodnotou. Vzpomeňte si, že tyto segmenty jsou definovány v Startup.cs.
app.UseEndpoints(endpoints =>
{
endpoints.MapControllerRoute(
name: "default",
pattern: "{controller=Home}/{action=Index}/{id?}");
});
EF usnadňuje vyhledávání dat pomocí FirstOrDefaultAsync metody. Důležitou bezpečnostní funkcí integrovanou do metody je, že kód ověří, že vyhledávací metoda našla film předtím, než se s ní 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:{PORT}/Movies/Details/1 něco podobného http://localhost:{PORT}/Movies/Details/12345 (nebo jinou hodnotu, která nepředstavuje skutečný film). Pokud jste nekontrolovali video s hodnotou null, aplikace vyvolá výjimku.
Prozkoumejte metody Delete a DeleteConfirmed metody.
// 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));
}
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 async Task<IActionResult> Delete(int? id)
{
// POST: Movies/Delete/5
[HttpPost, ActionName("Delete")]
[ValidateAntiForgeryToken]
public async Task<IActionResult> 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ě Delete metody – jednu pro GET a druhou pro POST – které mají stejný podpis parametru. (Oba musí jako parametr přijmout jedno celé číslo.)
Existují dva přístupy k tomuto problému, jeden 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. Tento atribut provádí mapování pro směrovací systém tak, aby metoda našla DeleteConfirmed adresu URL, která obsahuje /Delete/ pro požadavek POST.
Další běžnou prací pro metody, které mají identické názvy a podpisy, je uměle změnit podpis metody POST tak, aby zahrnoval další (nepoužitý) parametr. To jsme udělali v předchozím příspěvku, když jsme přidali notUsed parametr. Pro metodu [HttpPost] Delete byste mohli udělat totéž:
// POST: Movies/Delete/6
[HttpPost]
[ValidateAntiForgeryToken]
public async Task<IActionResult> Delete(int id, bool notUsed)
Publikování do Azure
Informace o nasazení do Azure najdete v kurzu: Sestavení aplikace ASP.NET Core a SQL Database ve službě Aplikace Azure Service.