.NET 코어 3.0 미들웨어 미들웨어

미들웨어 문서는 공식 웹 사이트 설명 : 미들웨어는 각 미들웨어에 대한 도관 응용 소프트웨어 요청과 응답에 장착되어있다 :

  • 다음 파이프 라인 구성 요소에 요청 여부를 선택.
  • 작업 전이나 파이프 라인의 조립 후 수행 될 수있다.

사용 IApplicationBuilder 미들웨어 파이프 라인을 만들

ASP.NET  코어 요청 파이프 라인은 차례로 호출에 요청 대리인의 시리즈를 포함하고 있습니다. 다음 그림은이 개념을 보여줍니다. 검은 색 화살표 실행.

IApplicationBuilder 방법은 세 가지 확장 된 구성 요청 위임을 제공합니다

  • app.Run 작업은 요청이 하방으로 전달되지 않기 때문에, 흔히 개시되는 파이프의 단부에서 실행하는 단말 프로그램을 추가한다. 예제 코드
  app.Run ( 비동기 문맥 =>
        {
            기다리고 있습니다 (context.Response.WriteAsync을 " 안녕하세요, 미들웨어! " );
        });
  • app.Use 여러 요청이 서로 연결 의뢰했다. 매개 변수는 파이프 라인의 다음 대리자를 나타냅니다. 다음 파라미터를 호출하지 않음으로써 그렇게 aap.run 단락 도관에 상당한다. 일반적으로 다음의 동작 전과 후에 실행위원회 다음 예와 같이
  app.Use ( 비동기 (문맥, 다음) =>
        {
            // 의 동작 전송 전에 
            AWAIT ; next.Invoke을 ()
             // 동작을 전송하기 전에 
        });

        app.Run ( 비동기 문맥 =>
        {
            기다리고 있습니다 (context.Response.WriteAsync을 " 2 대리자 안녕하세요. " );
        });
    }
  • 파이프 라인 분기를 만들 수있는 대회로지도 확대. 주어진 경로에 따라지도는 분기 파이프 라인 요청을 만들 수있는 요청을 일치합니다. 주어진 요청 경로가 경로의 시작 경우 분기가 실행됩니다. 아래의 예제 코드
  개인  정적  무효 HandleMapTest1 (IApplicationBuilder 응용 프로그램)
    {
        app.Run ( 비동기 문맥 =>
        {
            기다리고 context.Response.WriteAsync ( " 지도 테스트 1 " );
        });
    }

    개인  정적  무효 HandleMapTest2 (IApplicationBuilder 응용 프로그램)
    {
        app.Run ( 비동기 문맥 =>
        {
            기다리고 context.Response.WriteAsync ( " 지도 테스트 2 " );
        });
    }

    공공  무효 구성 (IApplicationBuilder 응용 프로그램)
    {
        app.Map ( " / MAP1 " , HandleMapTest1);

        app.Map ( " / MAP2 " , HandleMapTest2);

        app.Run ( 비동기 문맥 =>
        {
            기다리고 context.Response.WriteAsync를 ( " 안녕하세요 비지도 위임에서 <P>. " );
        });
    }

사용자 정의 미들웨어

미들웨어의 다음 데모 기록 API 입출력 파라미터.

다음과 같이 Webapi 1. 기본 포스트 WeatherForecastController 컨트롤러에있는 간단한 방법을 추가, 프로젝트를 생성

[HttpPost]
         공공  문자열 PostWeatherForecast ( INT TemperatureC)
        {
            반환  " 성공적으로 추가 " ;
        }

도 2에서 새로운 클래스 .CS 중간 파일을 만듭니다.

다음과 같이 기본 코드를 선택한 후 :

 // 당신은 당신의 프로젝트에 Microsoft.AspNetCore.Http.Abstractions 패키지를 설치해야 할 수 있습니다 
    공공  클래스 LogReqResponseMiddleware
    {
        개인  읽기 전용 RequestDelegate의 _next;

        공공 LogReqResponseMiddleware (RequestDelegate 다음)
        {
            _next = 다음;
        }

        공공 작업 호출 (HttpContext를 HttpContext를)
        {

            반환 _next (HttpContext에);
        }
    }

    // 확장 방법은 HTTP 요청 파이프 라인에 미들웨어를 추가하는 데 사용. 
    공공  정적  클래스 LogReqResponseMiddlewareExtensions
    {
        공공  정적 IApplicationBuilder UseLogReqResponseMiddleware ( IApplicationBuilder 빌더)
        {
            반환 builder.UseMiddleware <LogReqResponseMiddleware> ();
        }
    }

비계가 자동으로 우리는 다음 미들웨어에 전달 인보 방법을 만들 수 있습니다. 사용자 정의 미들웨어는 HTTP 요청 파이프 라인 확장 방법 UseLogReqResponseMiddleware에 추가됩니다.

상기 호출 비동기 아니라 우리가 스스로 변경할 수의 입력 파라미터와 출력 로그 정보는 다음의 코드는 인쇄 요청 API를 나타낸다

 // 당신은 당신의 프로젝트에 Microsoft.AspNetCore.Http.Abstractions 패키지를 설치해야 할 수 있습니다 
    공공  클래스 LogReqResponseMiddleware
    {
        개인  읽기 전용 RequestDelegate의 _next;

        공공 LogReqResponseMiddleware (RequestDelegate 다음)
        {
            _next = 다음;
        }

        공공  비동기 작업 호출 (HttpContext를 HttpContext를, ILogger입니다 <LogReqResponseMiddleware> 로거)
        {
            VAR의 요청 = httpContext.Request;
            VAR의 버퍼 = 새로운  바이트 [Convert.ToInt32 (request.ContentLength)];
            기다리고 request.Body.ReadAsync (버퍼, 0 , buffer.Length);
            // 把请求본체流转换成字符串
            VAR bodyAsText = Encoding.UTF8.GetString (버퍼);
            
            // 기록 요청 정보 
            VAR requestStr $ = " {request.scheme의 request.host} {} {} {request.path bodyAsText Request.QueryString을} {} " ;
            logger.LogDebug ( " 요청 : " + requestStr);


            VAR originalBodyStream = httpContext.Response.Body;
            사용 ( var에 위한 responseBody = 새로운 MemoryStream을 ())
            {
                httpContext.Response.Body = 위한 responseBody;
                기다리고 _next (HttpContext에);

                VAR의 응답 = httpContext.Response;
                response.Body.Seek ( 0 , SeekOrigin.Begin);
                 // 문자열로 
                문자열 텍스트 = (가) 기다리고  새로운 새로운 에서는 StreamReader (response.body) .ReadToEndAsync ();
                 // 새로운 설정 오프셋 0 
                response.Body.Seek를 ( 0 , SeekOrigin.Begin);

                // 레코드 반환 값 
                var에 responsestr $ = " {Response.StatusCode} : {텍스트} " ;
                logger.LogDebug ( " 응답 : " + responsestr);

                기다리고 responseBody.CopyToAsync (originalBodyStream)를;
            }
        }



    }
    // 확장 방법은 HTTP 요청 파이프 라인에 미들웨어를 추가하는 데 사용. 
    공공  정적  클래스 LogReqResponseMiddlewareExtensions
    {
        공공  정적 IApplicationBuilder UseLogReqResponseMiddleware ( IApplicationBuilder 빌더)
        {
            반환 builder.UseMiddleware <LogReqResponseMiddleware> ();
        }
    }

그런 다음 방법 구성 시작 클래스에 다음 코드 행을 추가하여, 중간 사용자 지정 HTTP 파이프 라인 요청을 추가 할 수 있습니다.

app.UseLogReqResponseMiddleware (); // 레코드 HTTP 요청 입출력 값;

우리는 요청 우체부를 시뮬레이션

다음과 같은 정보는 콘솔에 인쇄 :

추천

출처www.cnblogs.com/chengtian/p/11799530.html