Escolar Documentos
Profissional Documentos
Cultura Documentos
Neste
artigo eu
vou
mostrar
como
criar uma
aplicação
ASP .NET
Core
MVC
usando o
VS 2017.
// GET: Filmes/Details/5
public async Task<IActionResult> Details(int? id)
{
if (id == null)
{
return NotFound();
}
if (filme == null)
{
www.macoratti.net/17/04/aspcore_mvcfilme10.htm 1/6
01/11/2019 ASP .NET Core - Criando uma aplicação ASP .NET Core MVC com o VS 2017 - X
return NotFound();
}
return View(filme);
}
...
app.UseMvc(routes =>
{
routes.MapRoute(
name: "default",
template: "{controller=Home}/{action=Index}/{id?}");
});
...
Por exemplo, um hacker pode introduzir erros no site alterando a URL criada
pelos links de http://localhost:xxxx/Filmes/Details/1 para algo como
http://localhost:xxxx/Filmes/Details/12345 ( Ou algum outro valor que não
represente um filme real) com um objetivo de provocar um erro.
Se você não fosse feita a verificação de filme nulo, o aplicativo lançaria uma
exceção.
// GET: Filmes/Delete/5
public async Task<IActionResult> Delete(int? id)
{
if (id == null)
{
www.macoratti.net/17/04/aspcore_mvcfilme10.htm 2/6
01/11/2019 ASP .NET Core - Criando uma aplicação ASP .NET Core MVC com o VS 2017 - X
return NotFound();
}
if (filme == null)
{
return NotFound();
}
return View(filme);
}
// POST: Filmes/Delete/5
[HttpPost, ActionName("Delete")]
[ValidateAntiForgeryToken]
public async Task<IActionResult> DeleteConfirmed(int id)
{
var filme = await _context.Filme.SingleOrDefaultAsync(m => m.ID == id);
_context.Filme.Remove(filme);
await _context.SaveChangesAsync();
return RedirectToAction("Index");
}
Observe que o método HTTP GET Delete não exclui o filme especificado, ele
retorna uma view do filme onde você pode submeter(HttpPost) a exclusão.
Executar uma operação de exclusão em resposta a uma solicitação GET (ou
executar uma operação de edição, ou criação ou qualquer outra operação que
altera dados) abre um buraco de segurança.
// POST:
Filmes/Delete/5
´ // GET: [HttpPost,
Filmes/Delete/5 ActionName("Delete")]
public async
Task<IActionResult> [ValidateAntiForgeryToken]
Delete(int? id) public async
Task<IActionResult>
DeleteConfirmed(int id)
www.macoratti.net/17/04/aspcore_mvcfilme10.htm 3/6
01/11/2019 ASP .NET Core - Criando uma aplicação ASP .NET Core MVC com o VS 2017 - X
Existem duas abordagens para este problema, uma delas é dar aos métodos
nomes diferentes. Isso é o que o mecanismo Scaffolding fez no exemplo anterior.
No entanto, isso introduz um pequeno problema: a ASP.NET mapeia segmentos
de um URL para métodos Action por nome, e, se você renomear um método, o
roteamento normalmente não seria capaz de encontrar esse método.
// POST: Movies/Delete/6
[ValidateAntiForgeryToken]
public async Task<IActionResult> Delete(int id, bool notUsed)
Na verdade se você já conhecia a ASP .NET MVC percebeu que a maioria dos
conceitos sobre como a ASP .NET MVC funciona são utilizados com ASP .NET
MVC Core.
www.macoratti.net/17/04/aspcore_mvcfilme10.htm 4/6