[英]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.