ASP.NET MVC에서 예외 필터 및 설명 사용자 지정 예외 필터란 무엇입니까?
11293 단어 webdevprogrammingdotnet
예외 필터란 무엇입니까?
예외 필터는 모든 메서드, 컨트롤러 클래스에 대한 예외를 한 곳에서 처리할 수 있는 기능을 제공합니다. 예외 필터는 작업에서 일부 예외가 throw될 때 실행됩니다. 예외는 무엇이든 될 수 있습니다. 이는 IExceptionFilter 및 FileAttribute 인터페이스에서 상속되는 클래스를 생성하는 것입니다.
사용자 지정 예외 필터
예외 필터는 다음 작업을 수행할 수 없는 기본 제공 특성으로 예외 필터를 처리하기 위해 기본 제공 HandleError 특성을 제공합니다.
사용자 지정 예외 필터를 만들어 이러한 문제를 해결하는 방법을 살펴보겠습니다.
사용자 지정 예외 필터 만들기
여기에서는 모델 폴더 내부의 모델에 대한 Employee 클래스를 생성하고 있습니다.
직원. 수업
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
namespace LIBData
{
public class Employee
{
public int Id {
get;
set;
}
[Required(ErrorMessage = "Name Required")]
public string Name {
get;
set;
}
[Required(ErrorMessage = " Designation Required ")]
public string Designation{
get;
set;
}
[Required(ErrorMessage = "Salary Required ")]
public int Salary {
get;
set;
}
}
}
이제 컨트롤러 폴더 add 안에 컨트롤러 클래스를 추가해야 합니다.
EmployeeController
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using LIBUser.CustomFilter;
using LIBUser.Models;
namespace LIBUser.Controllers
{
public class EmployeeController: Controller
{
public EmployeeContext db = new EmployeeContext();
public ActionResult Index()
{
var employee = db .Employees.ToList();
return View(employee);
}
public ActionResult Details(int? id)
{
if (id == null)
{
return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
}
Employee employee = db.Employees.Find(id);
if (employee == null)
{
return HttpNotFound();
}
return View(employee);
}
public ActionResult Create()
{
return View();
}
[HttpPost]
[CustomExceptionHandlerFilter]
public ActionResult Create(Employee employee)
{
if (ModelState.IsValid)
{
if (employee.Designation== "JuniorForntEndDeveloper" && (employee.Salary < 1000 || employee.Salary > 4000))
{
throw new Exception("Salary is not matching with JuniorForntEndDeveloper.");
}
else if (employee.Designation== "WebDeveloper" && (employee.Salary < 30000 || employee.Salary > 40000))
{
throw new Exception("Salary is not matching with WebDeveloper.");
}
else if (employee.Designation== "Marketing Manager")
{
throw new Exception("Salary is not matching with Marketing Manager");
}
else
{
db .Employees.Add(employee);
db .SaveChanges();
}
}
return RedirectToAction("Index");
}
}
}
자세히 보기: Generate Thumbnail Using ASP.NET MVC
직원 컨트롤러 내부에 다음 코드 줄을 추가합니다.
이 예에서는 요구 사항에 따라 컨트롤러를 변경할 수 있는 사용자 정의 예외 필터를 사용하는 방법을 보여줍니다.
이제 Create 액션 메서드와 Index 액션 메서드에 대한 뷰를 추가해야 합니다. 생성 방법을 마우스 오른쪽 버튼으로 클릭하고 보기를 추가합니다.
보기 만들기
<xmp>
@model LIBData.Employee
@{
ViewBag.Title = "Create";
Layout = "~/Views/Shared/LibStudent.cshtml";
}<div class="container"><div class="card"><div class="card-header bg-dark">
<strong class="card-title" style="color : white;"> Add Employee Details</strong></div>
<div class="card-body">
@using (Html.BeginForm())
{
@Html.AntiForgeryToken()<div class="form-horizontal"><h4>Employee</h4>
<hr />
@Html.ValidationSummary(true, "", new { @class = "text-danger" })<div class="form-group">
@Html.LabelFor(model => model.Name, htmlAttributes: new { @class = "control-label col-md-2" })
@Html.EditorFor(model => model.Name, new { htmlAttributes = new { @class = "form-control" } })
@Html.ValidationMessageFor(model => model.Name, "", new { @class = "text-danger" })</div>
<div class="form-group">
@Html.LabelFor(model => model.Designation, htmlAttributes: new { @class = "control-label col-md-2" })
@Html.EditorFor(model => model.Designation, new { htmlAttributes = new { @class = "form-control" } })
@Html.ValidationMessageFor(model => model.Designation, "", new { @class = "text-danger" })</div>
<div class="form-group">
@Html.LabelFor(model => model.Salary, htmlAttributes: new { @class = "control-label col-md-2" })
@Html.EditorFor(model => model.Salary, new { htmlAttributes = new { @class = "form-control" } })
@Html.ValidationMessageFor(model => model.Salary, "", new { @class = "text-danger" })</div>
<div class="form-group"><div class="col-md-offset-2 col-md-10">
<input class="btn btn-default" type="submit" value="Create" /></div></div></div>
}</div></div></div>
<div>
@Html.ActionLink("Back to List", "Index")</div>
</xmp>
사용자 지정 예외 처리기를 만들기 위해 CustomExceptionHandlerFilter 클래스를 추가합니다.
FilterAttribute 및 IExceptionFilter를 구현하고 OnException 메서드를 재정의합니다.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
namespace LIBUser.Controllers
{
public class CustomExceptionHandlerFilter: FilterAttribute, IExceptionFilter
{
public void OnException(ExceptionContext filterContext)
{
ExceptionLogger logger = new ExceptionLogger()
{
ExceptionMessage = filterContext.Exception.Message,
ExceptionStackTrack = filterContext.Exception.StackTrace,
ControllerName = filterContext.RouteData.Values["controller"].ToString(),
ActionName = filterContext.RouteData.Values["action"].ToString(),
ExceptionLogTime = DateTime.Now
};
EmployeeContext dbContext = new EmployeeContext();
dbContext.ExceptionLoggers.Add(logger);
dbContext.SaveChanges();
filterContext.ExceptionHandled = true;
filterContext.Result = new ViewResult()
{
ViewName = "Error"
};
}
}
}
App_start 폴더 안에 있는 App_Start 폴더를 열면 FilterConfig 클래스가 포함되어 있습니다. 이 클래스 내에서 다음과 같은 방식으로 새 CustomExceptionHandlerFilter를 추가합니다.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using Microsoft.ApplicationInsights.DataContracts;
using MvcCustomExceptionFilter.CustomFilter;
namespace LIBUser.App_Start
{
public class FilterConfig
{
public static void RegisterGlobalFilter(GlobalFilterCollection filters)
{
filters.Add(new CustomExceptionHandlerFilter());
}
}
}
프로젝트를 생성할 때 빈 MVC 템플릿을 선택한 경우 FilterConfig 클래스를 사용할 수 없지만 준비된 MVC 템플릿을 선택한 경우 애플리케이션 내에서 FilterConfig 클래스를 사용할 수 있습니다. 이 파일을 사용할 수 없는 경우 App_Start 폴더 내에 이름이 FilterConfig인 클래스 파일을 만들면 됩니다. 이 FilterConfig 클래스는 애플리케이션에 전역적으로 필터를 추가하는 데 사용한 위치입니다. 웹 응용 프로그램이 시작될 때 파일이 인스턴스화됩니다.
신뢰할 수 있는 제품ASP.NET Development Company을 찾고 계십니까? 귀하의 검색은 여기서 끝납니다.
이제 CustomExceptionHandlerFilter를 Global에 등록합니다. 아삭스
글로벌.aspx
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Web.Routing;
using MvcCustomExceptionFilter.App_Start;
namespace MvcCustomExceptionFilter
{
public class MvcApplication : System.Web.HttpApplication
{
protected void Application_Start()
{
FilterConfig.RegisterGlobalFilter(GlobalFilters.Filters);
AreaRegistration.RegisterAllAreas();
RouteConfig.RegisterRoutes(RouteTable.Routes);
}
}
}
보기의 공유 폴더 안에는 오류가 포함되어 있습니다. cshtml 페이지는 오류를 수정합니다. 귀하의 요구 사항에 따라 cshtml. 공유 폴더에 오류가 없는 경우. cshtml 공유 폴더 안에 보기를 추가하고 이 코드를 오류 페이지 안에 넣을 수 있습니다.
<xmp>
@{
ViewBag.Title = "Error";
}<h1>Error Occured</h1>
<h1 class="alert alert-danger">An unknown error occurred while processing your request.</h1>
</xmp>
웹을 엽니다. config 파일을 만들고 시스템 내부에 사용자 지정 오류 모드를 추가합니다. 편물
<system.web>
<customerrors mode="On"></customerrors>
</system.web>
이제 애플리케이션을 실행하고 생성 보기 내에 세부 정보를 추가합니다.
특정 위치에 범위가 아닌 급여를 추가할 수 있으면 오류가 발생하고 노란색 화면이나 예외 대신 오류 페이지로 리디렉션됩니다. 여기에 JuniorForntEndDeveloper 10000에 대한 급여를 삽입합니다. JuniorForntEndDeveloper에 대한 코드 세트 급여가 1000에서 4000 사이이기 때문에 오류가 발생합니다.
만들기 버튼을 클릭하면 오류가 발생하고 오류 페이지로 리디렉션됩니다.
결론
예외 필터는 내장된 HandleError 속성을 제공하지만 컨트롤러 클래스 내부에서 발생하는 로그 오류 및 예외는 처리할 수 없지만 사용자 지정 예외의 도움으로 컨트롤러 클래스 내부에서 발생하는 오류를 처리할 수 있습니다.
Reference
이 문제에 관하여(ASP.NET MVC에서 예외 필터 및 설명 사용자 지정 예외 필터란 무엇입니까?), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/tarungurang/what-is-exception-filter-and-explain-custom-exception-filter-in-aspnet-mvc-1l5b텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)