ASP.NET Core 는 GraphicQL 제2 장 미들웨어 를 사용 합 니 다.

머리말
본문 을 시작 하기 전에 GraphQL 에 익숙 하지 않 은 친구 들 은 다음 글 을 볼 수 있 습 니 다.
본문:ASP.NET Core 에서 GraphicQL 사용 하기-제1장 Hello World
위의 문장 을 다 보고,아래 의 말 은 더 이상 하지 않 겠 으 니,상세 한 소 개 를 한번 봅 시다.
중간 부품
만약 당신 이 ASP.NET Core 의 미들웨어 에 익숙 하 다 면,당신 은 이전의 블 로그 에서 우리 가 이미 미들웨어 를 사용 했다 는 것 을 알 게 될 것 입 니 다.

app.Run(async (context) =>
{
 var result = await new DocumentExecuter()
 .ExecuteAsync(doc =>
 {
 doc.Schema = schema;
 doc.Query = @"
 query {
  hello
 }
 ";
 }).ConfigureAwait(false);

 var json = new DocumentWriter(indent: true)
 .Write(result)
 await context.Response.WriteAsync(json);
});
이 미들웨어 는 현재 검색 결 과 를 출력 하 는 것 을 책임 집 니 다.
    미들웨어 정의:
    중간 부품 은 응용 프로그램 파이프 에 불 러 오 는 구성 요소 로 요청 과 응답 을 처리 합 니 다.모든 중간 부품 은
        응용 프로그램 파이프 에 요청 을 전달 할 다음 구성 요 소 를 선택 할 수 있 습 니 다.
        응용 프로그램 파이프 에서 다음 구성 요소 가 실행 되 기 전과 실행 후 작업 을 할 수 있 습 니 다.
    출처:Microsoft Documentation
실제 미들웨어 는 의뢰 이거 나 더 정확히 말 하면 요청 의뢰(Request Delegate)입 니 다.그의 이름 처럼 미들웨어 는 요청 을 처리 하고 응용 프로그램 파이프 의 다음 미들웨어 에 의뢰 할 지 여 부 를 결정 합 니 다.앞의 예 에서 우 리 는 IApplicationBuilder 류 의 Run()방법 으로 요청 의뢰 를 설정 했다.
동적 조회 체 를 사용 하여 하 드 코딩 조회 체 를 교체 하 다.
우리 의 이전 예 에서 중간 부품 의 코드 는 매우 간단 하 다.그것 은 단지 고정된 조회 결 과 를 되 돌려 주 었 을 뿐이다.그러나 현실 장면 에서 조 회 는 동태 적 이 어야 하기 때문에 우 리 는 요청 에서 조회 체 를 읽 어야 한다.
서버 쪽 에 서 는 모든 요청 의뢰 가 HttpContext 인 자 를 받 을 수 있 습 니 다.만약 하나의 조회 체 가 POST 요청 을 통 해 서버 에 전송 된다 면 다음 코드 를 사용 하여 요청 체 의 내용 을 쉽게 얻 을 수 있 습 니 다.

string body; 
using (var streamReader = new StreamReader(httpContext.Request.Body)) 
{
 body = await streamReader.ReadToEndAsync();
}
요청 체 내 용량 을 가 져 오기 전에 문제 가 되 지 않도록 현재 요청 을 확인 해 야 합 니 다.
  •     POST 요청 인지 아 닌 지
  •     특정 Url 을 사 용 했 는 지 여부,예 를 들 어/api/graphql
  • 그래서 우 리 는 코드 를 조정 해 야 한다.
    
    if(context.Request.Path.StartsWithSegments("/api/graphql") 
     && string.Equals(context.Request.Method, 
       "POST", 
       StringComparison.OrdinalIgnoreCase)) 
    {
     string body;
     using (var streamReader = new StreamReader(context.Request.Body))
     {
     body = await streamReader.ReadToEndAsync();
     }
    
    ....
    ....
    ....
    하나의 요청 체 는 많은 필드 를 포함 할 수 있 습 니 다.graphql 조회 체 필드 이름 은 query 입 니 다.따라서 요청 체 의 JSON 문자열 을 Query 속성 을 포함 하 는 복잡 한 형식 으로 변환 할 수 있 습 니 다.
    이 복잡 한 유형 코드 는 다음 과 같다.
    
    public class GraphQLRequest
    {
     public string Query { get; set; }
    }
    다음 단 계 는 현재 요청 체 의 내용 을 GraphQLRequest 형식의 인 스 턴 스 로 역 직렬 화 하 는 것 입 니 다.여 기 는 JSon.Net 의 정적 방법 인 JSonConvert.DeserializeObjct 를 사용 하여 이전의 하 드 인 코딩 조회 체 를 교체 해 야 합 니 다.
    
    var request = JsonConvert.DeserializeObject<GraphQLRequest>(body);
    
    var result = await new DocumentExecuter().ExecuteAsync(doc =>
    {
     doc.Schema = schema;
     doc.Query = request.Query;
    }).ConfigureAwait(false);
    이상 의 수정 이 완료 되면 Startup.cs 파일 의 Run 방법 은 이 럴 것 입 니 다.
    
    app.Run(async (context) =>
    {
     if (context.Request.Path.StartsWithSegments("/api/graphql")
     && string.Equals(context.Request.Method, 
        "POST", 
        StringComparison.OrdinalIgnoreCase))
     {
     string body;
     using (var streamReader = new StreamReader(context.Request.Body))
     {
      body = await streamReader.ReadToEndAsync();
    
      var request = JsonConvert.DeserializeObject<GraphQLRequest>(body);
      var schema = new Schema { Query = new HelloWorldQuery() };
    
      var result = await new DocumentExecuter()
      .ExecuteAsync(doc =>
      {
      doc.Schema = schema;
      doc.Query = request.Query;
      }).ConfigureAwait(false);
    
      var json = new DocumentWriter(indent: true)
      .Write(result);
      await context.Response.WriteAsync(json);
     }
     }
    });
    최종 효과
    이제 POStman 을 사용 하여 POST 요청 을 만 들 수 있 습 니 다.요청 결 과 는 다음 과 같 습 니 다.

    결 과 는 정확히 돌 아 왔 다.
    이 원본 코드:https://github.com/lamondlu/GraphQL_Blogs/tree/master/Part%20II
    총결산
    이상 은 이 글 의 전체 내용 입 니 다.본 논문 의 내용 이 여러분 의 학습 이나 업무 에 어느 정도 참고 학습 가치 가 있 기 를 바 랍 니 다.궁금 한 점 이 있 으 시 면 댓 글 을 남 겨 주 셔 서 저희 에 대한 지지 에 감 사 드 립 니 다.

    좋은 웹페이지 즐겨찾기