[英]setting status code on graphql controller response
伙计们,我很抱歉发布这个问题
我对 C#(具有 javascript 背景)很陌生,我一直在尝试设置 AsP.Net graphql 服务器,我管理它,但服务器的控制台总是
System.InvalidOperationException: StatusCode cannot be set because the response has already started.
我的 controller 代码是:
namespace server.Controllers
{
[Route("graphql")]
[ApiController]
public class GraphqlController : ControllerBase
{
[HttpPost]
public async Task<ActionResult> Post([FromBody] GraphQLQuery query)
{
var writer = new GraphQL.SystemTextJson.DocumentWriter();
var schema = new MySchema();
var inputs = query.Variables.ToInputs();
var executer = new DocumentExecuter();
var result = await executer.ExecuteAsync(_ =>
{
_.Schema = schema.GraphQLSchema;
_.Query = query.Query;
_.OperationName = query.OperationName;
_.Inputs = inputs;
});
Response.ContentType = "application/json";
Response.StatusCode = 200; // OK
await writer.WriteAsync(Response.Body, result);
if (result.Errors?.Count > 0)
{
return BadRequest();
}
else
{
return Ok(result);
}
}
}
}
你能帮我解决我做错了什么吗?
原因是您在使用时已经开始响应
Response.ContentType = "application/json";
Response.StatusCode = 200; // OK
await writer.WriteAsync(Response.Body, result);
您正在手动处理响应 stream 以及应该写入的内容。
此操作与 ASP.Net 在使用Ok()
时所做的相同。 ASP.Net 将结果写入响应正文并将状态代码设置为 200。
由于您自己处理响应,因此您不应该真正使用 ASP.Net 的功能。 您可以只返回如下所示的EmptyResult
,并且您应该得到相同的响应结果,而不会出现来自中间件的错误。
return new EmptyResult();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.