[C#/ASP.NET MVC/.NETCORE] ValidateAntiForgeryTokenAttribute 클래스 : 위조 방지 토큰 확인하기
C#/ASP.NET MVC 2020. 10. 19. 00:04728x90
반응형
728x170
▶ MovieController.cs
using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using TestProject.Data;
using TestProject.Models;
namespace TestProject.Controllers
{
/// <summary>
/// 영화 컨트롤러
/// </summary>
public class MovieController : Controller
{
//////////////////////////////////////////////////////////////////////////////////////////////////// Field
////////////////////////////////////////////////////////////////////////////////////////// Private
#region Field
/// <summary>
/// 컨텍스트
/// </summary>
private readonly DatabaseContext context;
#endregion
//////////////////////////////////////////////////////////////////////////////////////////////////// Constructor
////////////////////////////////////////////////////////////////////////////////////////// Public
#region 생성자 - MovieController(context)
/// <summary>
/// 생성자
/// </summary>
/// <param name="context">컨텍스트</param>
public MovieController(DatabaseContext context)
{
this.context = context;
}
#endregion
//////////////////////////////////////////////////////////////////////////////////////////////////// Method
////////////////////////////////////////////////////////////////////////////////////////// Public
#region 인덱스 페이지 처리하기 - Index()
/// <summary>
/// 인덱스 페이지 처리하기
/// </summary>
/// <returns>액션 결과 태스크</returns>
public async Task<IActionResult> Index()
{
List<Movie> list = await this.context.Movie.ToListAsync();
return View(list);
}
#endregion
#region 상세 페이지 처리하기 - Details(id)
/// <summary>
/// 상세 페이지 처리하기
/// </summary>
/// <param name="id">ID</param>
/// <returns>액션 결과 태스크</returns>
public async Task<IActionResult> Details(int? id)
{
if(id == null)
{
return NotFound();
}
Movie movie = await this.context.Movie.FirstOrDefaultAsync(m => m.ID == id);
if(movie == null)
{
return NotFound();
}
return View(movie);
}
#endregion
#region 생성 페이지 처리하기 - Create()
/// <summary>
/// 생성 페이지 처리하기
/// </summary>
/// <returns>액션 결과</returns>
public IActionResult Create()
{
return View();
}
#endregion
#region 생성하기 - Create(movie)
/// <summary>
/// 생성하기
/// </summary>
/// <param name="movie">영화</param>
/// <returns>액션 결과 태스크</returns>
[HttpPost]
[ValidateAntiForgeryToken]
public async Task<IActionResult> Create([Bind("ID,Title,ReleaseDate,Genre,Price")] Movie movie)
{
if(ModelState.IsValid)
{
this.context.Add(movie);
await this.context.SaveChangesAsync();
return RedirectToAction(nameof(Index));
}
return View(movie);
}
#endregion
#region 편집 페이지 처리하기 - Edit(id)
/// <summary>
/// 편집 페이지 처리하기
/// </summary>
/// <param name="id">ID</param>
/// <returns>액션 결과 태스크</returns>
public async Task<IActionResult> Edit(int? id)
{
if(id == null)
{
return NotFound();
}
Movie movie = await this.context.Movie.FindAsync(id);
if(movie == null)
{
return NotFound();
}
return View(movie);
}
#endregion
#region 편집 페이지 처리하기 - Edit(int id, movie)
/// <summary>
/// 편집 페이지 처리하기
/// </summary>
/// <param name="id">ID</param>
/// <param name="movie">영화</param>
/// <returns>액션 결과 태스크</returns>
[HttpPost]
[ValidateAntiForgeryToken]
public async Task<IActionResult> Edit(int id, [Bind("ID,Title,ReleaseDate,Genre,Price")] Movie movie)
{
if(id != movie.ID)
{
return NotFound();
}
if(ModelState.IsValid)
{
try
{
this.context.Update(movie);
await this.context.SaveChangesAsync();
}
catch(DbUpdateConcurrencyException)
{
if(!MovieExists(movie.ID))
{
return NotFound();
}
else
{
throw;
}
}
return RedirectToAction(nameof(Index));
}
return View(movie);
}
#endregion
#region 삭제 페이지 처리하기 - Delete(id)
/// <summary>
/// 삭제 페이지 처리하기
/// </summary>
/// <param name="id">ID</param>
/// <returns>액션 결과 페이지</returns>
public async Task<IActionResult> Delete(int? id)
{
if(id == null)
{
return NotFound();
}
Movie movie = await this.context.Movie.FirstOrDefaultAsync(m => m.ID == id);
if(movie == null)
{
return NotFound();
}
return View(movie);
}
#endregion
#region 삭제 완료시 페이지 처리하기 - DeleteConfirmed(id)
/// <summary>
/// 삭제 완료시 페이지 처리하기
/// </summary>
/// <param name="id">ID</param>
/// <returns>액션 결과 태스크</returns>
[HttpPost, ActionName("Delete")]
[ValidateAntiForgeryToken]
public async Task<IActionResult> DeleteConfirmed(int id)
{
Movie movie = await this.context.Movie.FindAsync(id);
this.context.Movie.Remove(movie);
await this.context.SaveChangesAsync();
return RedirectToAction(nameof(Index));
}
#endregion
////////////////////////////////////////////////////////////////////////////////////////// Private
#region 영화 존재 여부 구하기 - MovieExists(id)
/// <summary>
/// 영화 존재 여부 구하기
/// </summary>
/// <param name="id">ID</param>
/// <returns>영화 존재 여부</returns>
private bool MovieExists(int id)
{
return this.context.Movie.Any(e => e.ID == id);
}
#endregion
}
}
728x90
반응형
그리드형(광고전용)
'C# > ASP.NET MVC' 카테고리의 다른 글
[C#/ASP.NET MVC/.NETCORE] Entity Framework Core를 사용해 인메모리 데이터베이스 접속하기 (0) | 2020.10.20 |
---|---|
[C#/ASP.NET MVC/.NETCORE] RAZOR 구문에서 주석 사용하기 (0) | 2020.10.20 |
[C#/ASP.NET MVC/.NETCORE] 서버 재시작 없이 .cshtml 파일 변경 사항 반영하기 (0) | 2020.10.20 |
[C#/ASP.NET MVC/.NETCORE] 누겟 설치 : Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation (0) | 2020.10.20 |
[C#/ASP.NET MVC/.NETCORE] 스캐폴딩 기능을 사용해 MVC 웹앱 만들기 (0) | 2020.10.19 |
[C#/ASP.NET MVC/.NETCORE] dotnet new mvc 명령 : MVC 웹앱 만들기 (0) | 2020.10.18 |
[C#/ASP.NET MVC/.NETCORE] 스캐폴딩 기능을 사용해 RAZOR 페이지 웹앱 만들기 (최종) (0) | 2020.10.18 |
[C#/ASP.NET MVC/.NETCORE] BindPropertyAttribute 클래스 : SupportsGet 속성 사용하기 (0) | 2020.10.18 |
[C#/ASP.NET MVC/.NETCORE] @page 지시문 : 경로 템플리트 추가하기 (0) | 2020.10.18 |
[C#/ASP.NET MVC/.NETCORE] @page 지시문 : 경로 템플리트 추가하기 (0) | 2020.10.18 |
댓글을 달아 주세요