C# GraphQL 踩坑记录

241 阅读1分钟

1. DB未启动,导致service崩溃

Startup.cs

        public void Configure(IApplicationBuilder app, IWebHostEnvironment env, ILoggerFactory loggerFactory)
        {
        ......
        //UseExceptionHandler:捕捉服务启动时的错误
        app.UseExceptionHandler(errorApp =>
        {
        	errorApp.Run(async context =>
            {
            	ExceptionEntity result = new();
                result.Status = "200";
                result.Res = "OK";
                var exceptionHandlerPathFeature = context.Features.Get<IExceptionHandlerPathFeature>();
                if (exceptionHandlerPathFeature?.Error is MySqlConnector.MySqlException)
                {
                    context.Response.StatusCode = 512;//数据库连接错误
                    result.Status = "512";
                    result.Res = "NG"
                }
                //Formatting.Indented:缩进格式进行整形
                await context.Response.WriteAsync(JsonConvert.SerializeObject(result, Formatting.Indented));
            });
        }).UseHealthChecks("/health");//启动错误时,依旧启动服务
        ......
        }

2. 明明response中已经写好数据,而在取数据就是取不到

现象: 业务处理完后,把处理结果写进response

httpContext.Response.StatusCode = 200;

var data = JsonConvert.SerializeObject(result.Data);
await httpContext.Response.WriteAsync(data);//放入处理结果

验证返回结果

return Encoding.UTF8.GetString(response.BodyWriter.GetMemory().ToArray()).Replace("\0", string.Empty)

这里返回结果,总是空百思不得其解

解决方法:可能偏移量发生了变动

response.Body.Seek(0, SeekOrigin.Begin);//把body的偏移量重置
var reader = new StreamReader(response.Body);

return reader.ReadToEndAsync().Result;