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();
}
요청 체 내 용량 을 가 져 오기 전에 문제 가 되 지 않도록 현재 요청 을 확인 해 야 합 니 다.
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
총결산
이상 은 이 글 의 전체 내용 입 니 다.본 논문 의 내용 이 여러분 의 학습 이나 업무 에 어느 정도 참고 학습 가치 가 있 기 를 바 랍 니 다.궁금 한 점 이 있 으 시 면 댓 글 을 남 겨 주 셔 서 저희 에 대한 지지 에 감 사 드 립 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Tailwind를 ASP.NET Core 프로젝트에 통합우리는 을 사용합니다. 에서 코드를 찾을 수 있습니다. 면도기 페이지 구조를 추가합니다. "node_modules"가 설치되었습니다. "tailwind.config.js"파일이 생성되었습니다. 모든 .razor 및 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.