ASP.NET Core 에서 전역 이상 차단 을 실현 하 는 전체 절차
7512 단어 asp.netcore전체 국면이상 하 다
이상 은 실행 중 오류 입 니 다.이상 이 적당 한 처 리 를 받 지 못 하면 프로그램 이 예상 치 못 하 게 종 료 될 수 있 습 니 다.이 편 은 ASP.Net Core MVC 에서 전체적인 이상 처 리 를 어떻게 실현 하 는 지 에 대해 토론 하 겠 습 니 다.저 는 사례 코드 와 캡 처 를 통 해 이러한 개념 을 설명 하 겠 습 니 다.
전역 이상 처리
사실은 ASP.Net Core MVC 프레임 워 크 에 전역 이상 처리 메커니즘 이 있 습 니 다.중심 화 된 곳 에서 전역 이상 처리 중간 부품 을 사용 하여 이상 차단 을 할 수 있 습 니 다.이런 중심 화 방식 을 사용 하지 않 으 면 Controller 나 Action 역할 영역 에서 만 단독 처리 할 수 있 습 니 다.이 로 인해 이상 처리 코드 가 프로젝트 곳곳에 흩 어 질 수 있 습 니 다.잘 지 키 지 못 하 는 것 도 귀 찮 지 않 습 니까?
두 번 째 로 전역 이상 을 처리 하 는 방법 은 exception filter 를 사용 하 는 것 입 니 다.이 편 에서 저 는 여러분 과 전역 이상 처리 미들웨어 와 UseException Handler 방법 으로 이상 을 관리 하 는 것 에 대해 이야기 하려 고 합 니 다.
UseExceptionHandler 확장 방법 사용 하기
UseExceptionHandler 확장 방법 은 ExceptionHandler 미들웨어 를 Asp.net Core 의 요청 처리 파이프 에 등록 한 다음 IException Handler Feature 인터페이스의 인 스 턴 스 에서 이상 대상 을 가 져 올 수 있 습 니 다.아래 코드 세 션 은 UseExceptionHandler 방법 을 사용 하여 전체 이상 을 차단 하 는 방법 을 보 여 줍 니 다.
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
app.UseExceptionHandler(builder =>
{
builder.Run(async context =>
{
context.Response.StatusCode = (int)HttpStatusCode.InternalServerError;
context.Response.ContentType = "application/json";
var exception = context.Features.Get<IExceptionHandlerFeature>();
if (exception != null)
{
var error = new ErrorMessage()
{
Stacktrace = exception.Error.StackTrace,
Message = exception.Error.Message
};
var errObj = JsonConvert.SerializeObject(error);
await context.Response.WriteAsync(errObj).ConfigureAwait(false);
}
});
}
);
app.UseStaticFiles();
app.UseRouting();
app.UseAuthorization();
app.UseEndpoints(endpoints =>
{
endpoints.MapControllerRoute(
name: "default",
pattern: "{controller=Home}/{action=Index}/{id?}");
});
}
다음은 코드 에서 인용 한 ErrorMessage 클래스 의 정의 입 니 다.
public class ErrorMessage
{
public string Message { get; set; }
public string Stacktrace { get; set; }
}
전역 이상 미들웨어 설정아시 다시 피 ASP.Net Core MVC 프로젝트 에는 Startup.cs 파일 이 있 습 니 다.Configure 방법 에서 전역 이상 차단 미들웨어 코드 를 설정 할 수 있 습 니 다.다음 과 같 습 니 다.
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
else
{
app.UseExceptionHandler("/Error");
}
app.UseStaticFiles();
app.UseCookiePolicy();
app.UseMvc(routes =>
{
routes.MapRoute(
name: "default",
template:
"{controller=Home}/{action=Index}/{id?}");
});
}
위의 app.UseExceptionHandler("/Error")를 중점적으로 볼 수 있 습 니 다.이곳 의 UseExceptionHandler 는 pipeline 등록 을 실 현 했 습 니 다.프로그램 에 처리 되 지 않 은 이상 이 발생 하면 자동 으로 사용 자 를 안내/Error 페이지 로 안내 합 니 다.UseStatus CodePages With ReExecute 확장 방법 으로 pipeline 에 상태 코드 페이지 를 추가 할 수 있 습 니 다.이것 은 무슨 뜻 입 니까?사실은 http 500 가이드 500 페이지,http 404 가이드 404 페이지 입 니 다.아래 코드 세 션 은 수 정 된 Configure 방법 코드 를 보 여 줍 니 다.
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
else
{
app.UseExceptionHandler("/Error");
app.UseStatusCodePagesWithReExecute("/Error/NotFound/{0}");
}
//Other code
}
ErrorController 사용 하기HomeController 아래 에 오 류 를 전문 적 으로 처리 하 는 action 방법 이 있 습 니 다.여기 서 우 리 는 이 action 을 사용 하지 않 습 니 다.당신 은 그것 을 삭제 할 수 있 습 니 다.그 다음 에 저 는 전문 적 인 ErrorController 를 정의 하려 고 합 니 다.그 안에 경로 가/Error 인 action 방법 이 포함 되 어 있 습 니 다.
public class ErrorController : Controller
{
[HttpGet("/Error")]
public IActionResult Index()
{
IExceptionHandlerPathFeature iExceptionHandlerFeature = HttpContext.Features.Get<IExceptionHandlerPathFeature>();
if (iExceptionHandlerFeature != null)
{
string path = iExceptionHandlerFeature.Path;
Exception exception = iExceptionHandlerFeature.Error;
//Write code here to log the exception details
return View("Error",iExceptionHandlerFeature);
}
return View();
}
[HttpGet("/Error/NotFound/{statusCode}")]
public IActionResult NotFound(int statusCode)
{
var iStatusCodeReExecuteFeature =HttpContext.Features.Get<IStatusCodeReExecuteFeature>();
return View("NotFound",iStatusCodeReExecuteFeature.OriginalPath);
}
}
IException HandlerPathFeature 로 이상 관련 정 보 를 얻 을 수 있 고,ISTatus Code ReExecuteFeature 로 http 404 이상 시 요청 경 로 를 얻 을 수 있 습 니 다.참,IException HandlerPathFeature 와 ISTatus Code ReExecuteFeature 를 사용 하려 면 nuget 에 Microsoft.AspNetCore.Diagnostics 패 키 지 를 설치 한 것 을 기억 하 세 요.다음 코드 는 이상 발생 시간의 경로 주 소 를 가 져 오 는 방법 을 보 여 줍 니 다.
string route = iExceptionHandlerFeature.Path;
이상 한 자세 한 정 보 를 얻 으 려 면 다음 문 구 를 사용 할 수 있 습 니 다.
var exception = HttpContext.Features.Get<IExceptionHandlerPathFeature>();
이 경로 의 주소 와 이상 한 상세 한 정 보 를 얻 으 면 로그 파일 에 기록 할 수 있 으 며 추가 적 으로 자세히 분석 할 수 있 습 니 다.보기 로 오류 정보 보 여주 기
오류 정 보 를 보 여 주 는 View 를 만 들 수 있 습 니 다.다음 에 Error View Page 의 자세 한 코드 를 보 여 줍 니 다.
@model Microsoft.AspNetCore.Diagnostics.IExceptionHandlerFeature
@{
ViewData["Title"] = "Index";
Layout = "~/Views/Shared/_Layout.cshtml";
}
<div class="row">
<div class="text-danger">
<h3>Error: @Model.Error.Message</h3>
</div>
</div>
<div class="row">
<div class="col-12">
<p>@Model.Error.StackTrace</p>
<p>@Model.Error.InnerException</p>
</div>
</div>
다음은 NotFound 페이지 의 코드 입 니 다.
@model string
@{
ViewData["Title"] = "NotFound";
Layout = "~/Views/Shared/_Layout.cshtml";
}
<h1 class="text-danger">
Error: The requested URL @Model was not found!</h1>
<hr />
이제 프로그램 을 달 릴 수 있 습 니 다.다음 과 같은 잘못된 정 보 를 볼 수 있 습 니 다.존재 하지 않 는 페이지 를 열 려 고 시도 하면 ErrorController.NotFound 가 포장 한 404 설명 정보 로 자동 으로 이동 합 니 다.
ASP.NET Core 에 전역 이상 처리 가 내장 되 어 있 습 니 다.이 기술 을 이용 하여 집중 화 된 곳 에서 응용 프로그램의 모든 이상 정 보 를 캡 처 할 수 있 습 니 다.물론 환경 에 따라 사용 하지 않 는 이상 처리 조 치 를 취 할 수 있 습 니 다.예 를 들 어 개발 환경,테스트 환경,생산 환경 등 입 니 다.
링크
더 많은 고 품질 건어물:나의 GitHub 참조:https://www.infoworld.com/art
ASP.NET Core 에서 전역 이상 차단 을 실현 하 는 것 에 관 한 이 글 은 여기까지 소개 되 었 습 니 다.더 많은 관련 ASP.NET Core 전역 이상 차단 내용 은 우리 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 조회 하 시기 바 랍 니 다.앞으로 많은 응원 부 탁 드 리 겠 습 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
ASP.NET Core 에서 전역 이상 차단 을 실현 하 는 전체 절차UseExceptionHandler 확장 방법 은 ExceptionHandler 미들웨어 를 Asp.net Core 의 요청 처리 파이프 에 등록 한 다음 IException Handler Feature 인터페이스의...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.