ASP.NET Core 에서 합 격 된 미들웨어 를 어떻게 만 드 는 지 자세히 알 아 보 세 요.
모든 미들웨어 구성 요 소 는 HttpContext 인 자 를 가 진 Invoke 방법 이 있 습 니 다.이 매개 변 수 를 사용 하여 처리 할 수 있 습 니 다.
public async Task Invoke(HttpContext context)
{
if (context.Request.Path...)
{
await context.Response.WriteAsync("writing text...");
}
}
응용 프로그램의 맨 위 에 있 는 미들웨어 는 모든 요청 에 대해 호출 될 것 입 니 다.이것 은.NET 프레임 워 크 가 자동 으로 완성 한 것 이다.중간 부품 은 클 라 이언 트 에 응답 을 보 낼 수도 있 고 다음 중간 부품 을 호출 할 수도 있다.다음 선택 에 대해 서 는 다음 미들웨어 구성 요소 에 접근해 야 합 니 다.대부분의 미들웨어 구성 요 소 는 RequestDelegate 인 자 를 가 진 구조 함 수 를 사용 하 는 이유 입 니 다.한 마디 로 RequestDelegate 는 자동 으로 채 워 집 니 다.신경 쓰 지 마 세 요.중간 부품 은 Startup.cs 의 Configure 방법 에 등 록 됩 니 다.Configure 방법 은 IApplicationBuilder 인 자 를 가지 고 있 습 니 다.이 인 자 는 모든 종류의 미들웨어 등록 에 필요 한 방법 을 제공 합 니 다.미들웨어 를 만 들 려 고 합 니 다.
public class MyCustomMiddleware
{
private readonly RequestDelegate _next;
public MyCustomMiddleware(RequestDelegate next)
{
_next = next;
}
public async Task Invoke(HttpContext context, IWebHostEnvironment env)
{
context.Response.Headers["app-name"] = env.ApplicationName+"Zaranet";
context.Response.Headers["env-name"] = env.EnvironmentName+ "Zaranet";
await _next(context);
}
}
그 다음 에 저 희 는 Startup.cs 의 Configure 방법 에서 use 를 통 해 사용자 정의 미들웨어 를 등록 합 니 다.
public void Configure(IApplicationBuilder app, ...)
{
app.UseMyCustomMiddleware();
}
프로그램 을 시작 하면 우 리 는 정상 적 인 것 을 발견 하고 우리 가 원 하 는 효 과 를 얻 었 다.그러나 실제 적 으로 UseMiddleware 를 직접 호출 할 필요 가 없습니다.미들웨어 작성 자의 표준 방법 은 등 록 된 미들웨어 에 특 정 된 확장 방법 을 만 드 는 것 이기 때 문 입 니 다.
using MiddlerWareSolucation.MiddlerWare;
using Microsoft.AspNetCore.Builder;
namespace MiddlerWareSolucation.MiddlerWare_Extensions
{
public static class MyCustomMiddlewareExtensions
{
public static IApplicationBuilder UseMyCustomMiddleware(this IApplicationBuilder app)
{
app.UseMiddleware<MyCustomMiddleware>();
return app;
}
}
}
그 다음 에 Extensions 확장 방법 을 직접 호출 하면 효 과 는 똑 같 습 니 다.
public void Configure(IApplicationBuilder app, ...)
{
app.UseMyCustomMiddleware();
}
일부 때 저 희 는 클 라 이언 트 가 요청 한 경 로 를 통 해 미들웨어 를 시작 하려 고 합 니 다.물론 MapWhen 은 지정 한 서술 어 를 통 해 미들웨어 파 이 프 를 두 개의 완전히 독립 된 분기 로 나 눌 수 있 습 니 다.
app.UseMiddlewareOne();
app.MapWhen(context => context.Request.Path.StartsWithSegments("/api"), appBuilder =>
{
appBuilder.UseMiddlewareTwo();
});
app.UseMiddlewareThree();
이 예제 에서 미들웨어 One 은 항상 실 행 됩 니 다.요청 경로 가'/api'로 시작 하면 미들웨어 Two 를 실행 합 니 다.그렇지 않 으 면 중간 부품 Three 를 실행 합 니 다.이 설정 을 사용 하면 미들웨어 2 와 미들웨어 3 는 하나의 요청 에 대해 실행 할 수 없습니다.제 가 말씀 드 리 고 싶 은 것 은 마지막 상황 입 니 다.대부분의 미들웨어 가 모든 요청 에 대해 실행 되 기 를 원 하지만 일부 조건 이 있 습 니 다.-특정 미들웨어 는 특정한 요청 에 만 실행 되 어야 합 니 다.
UseWhen 을 통 해 쉽게 이 루어 집 니 다.UseWhen 은 술어 로 미들웨어 가 실행 되 어야 하 는 지 확인 할 수 있 습 니 다.
app.UseWhen(context => context.Request.Path.StartsWithSegments("/api"), appBuilder =>
{
appBuilder.UseStatusCodePagesWithReExecute("/apierror/{0}");
appBuilder.UseExceptionHandler("/apierror/500");
});
이렇게 하면 등록 방식 을 선택 하여 중간 부품 을 스스로 제어 할 수 있다.이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
.Net Core Excel 템플릿 읽기 Excel 파일 내보내기텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.