ASP.NET Core 2.0 미들웨어(번역)

문제.
어떻게 가장 간단 한 ASP.NET 코어 미들웨어 를 만 듭 니까?
답안
VS 를 사용 하여 ASP.NET Core 2.0 의 빈 항목 을 만 듭 니 다.Startup.cs 의 Configure()방법 에 주의 하 십시오.

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
  app.Run(async (context) =>
  {
    await context.Response.WriteAsync("Hello World! (Run)");
  });
}
요청 파 이 프 를 만 드 는 방법 은 IApplicationBuilder 의 확장 방법 을 사용 하 는 것 이 좋 습 니 다.

public static void RunHelloWorld(this IApplicationBuilder app)
{
  app.Run(async (context) =>
  {
    await context.Response.WriteAsync("Hello World! (Run)");
  });
}

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
  app.RunHelloWorld();
}
실행,이 때 페이지 표시:

위 에서 우 리 는 IApplicationBuilder.Run()을 사용 하여 미들웨어 를 설정 합 니 다.다른 방법 은 IApplicationBuilder.Use()입 니 다.

public static void UseHelloWorld(this IApplicationBuilder app)
{
  app.Use(async (context, next) =>
  {
    await context.Response.WriteAsync("Hello World! (Use)
"); await next(); }); }

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
  app.UseHelloWorld();
  app.RunHelloWorld();
}
실행,이 때 페이지 표시:

중간 부품 을 단독 클래스 로 정의 하 는 것 이 더 좋 은 실천 방법 이다.

public class HelloWorldMiddleware
{
  private readonly RequestDelegate _next;

  public HelloWorldMiddleware(RequestDelegate next)
  {
    _next = next;
  }

  public async Task Invoke(HttpContext context)
  {
    await context.Response.WriteAsync("Hello World! (Use in Class)
"); await _next(context); } } public static class UseHelloWorldInClassExtensions { public static IApplicationBuilder UseHelloWorldInClass(this IApplicationBuilder app) { return app.UseMiddleware<HelloWorldMiddleware>(); } }

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
  app.UseHelloWorld();
  app.UseHelloWorldInClass();
  app.RunHelloWorld();
}
실행,이 때 페이지 표시:

토론 하 다.
미들웨어 는 HTTP 요청 과 응답 메 시 지 를 차단 하 는 구성 요소 입 니 다.우 리 는 이 구성 요소 체인 을 만들어 서 프로그램 에 요청 파 이 프 를 만 듭 니 다.
우 리 는 Configure()방법의 IApplicationBuilder 인 자 를 통 해 이 요청 파 이 프 를 만 듭 니 다.IApplicationBuilder 인 자 는 다음 과 같은 방법 이 있 습 니 다.
  • Run():미들웨어 를 추가 하고 요청 파 이 프 를 종료 합 니 다(즉,다음 미들웨어 를 사용 하지 않 는 다 는 것 입 니 다)
  • Use():미들웨어 를 추가 하고 lambda 표현 식 이나 구체 적 인 종 류 를 사용 합 니 다
  • Map():요청 경로 에 따라 미들웨어 를 추가 합 니 다
  • Run
    이 방법 은 RequestDelegate 의뢰 를 매개 변수 로 받 아들 이 고 의뢰 방법 이 호출 될 때 HttpContext 인 자 를 받 습 니 다.이 의뢰 방법 은 요청 파 이 프 를 종료 하기 때문에 void 로 돌아 갑 니 다.
    Use
    이 방법 은 Func 의뢰 를 매개 변수 로 받 습 니 다.이 의뢰 방법 은 HttpContext 와 다음 미들웨어 를 가리 키 는 next 두 개의 매개 변수 가 있 습 니 다.빈 상태 로 돌아 갑 니 다(Task).다음 미들웨어 를 호출 하지 않 으 면 요청 파 이 프 를 종료 합 니 다(Run 효과 와 같 습 니 다).
    UserMiddleware
    단독 클래스 를 통 해 미들웨어 를 만 들 때 저 희 는 UseMiddleware 방법 을 사용 하고 구체 적 인 실현 유형 을 일반적인 매개 변수 로 합 니 다.
    중간 부품 류 중 두 부분 이 매우 중요 하 다.
    1.구조 함 수 는 RequestDelegate 를 받아들인다.이 의뢰 를 호출 할 때 현재 요청 을 다음 미들웨어 로 전송 합 니 다.
    2.HttpContext 인 자 를 받 고 빈 곳 으로 돌아 가 는 Invoke 방법 이 있 습 니 다(Task).중간 부품 을 사용 해 야 할 때 프레임 워 크 는 이 방법 을 주동 적 으로 호출 합 니 다.
    주:단독 클래스 에서 미들웨어 를 실현 하고 UseMiddleware 로 포장 하 는 것 이 가장 좋 은 실천 입 니 다.
    확장 방법
    확장 방법의 차이 점 을 주의해 야 합 니 다.RunXXX 은 값 을 되 돌려 주지 않 고 UseXXX 는 값 을 되 돌려 줍 니 다(IApplicationBuilder).Run()이 요청 파 이 프 를 종료 하고 Use()가 다른 미들웨어 로 연 결 될 수 있 기 때 문 입 니 다.
    차례
    중간 부품 은 Configure()방법 에 따라 순서대로 호출 됩 니 다.클 라 이언 트 로 돌아 가 는 응답 도 같은 미들웨어 파 이 프 를 겪 습 니 다.
    소스 코드 다운로드
    원문
    이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

    좋은 웹페이지 즐겨찾기