You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.NET Core 3.1集成GraphQL调试时请求不进控制器反而到ObjectGraphType求助

问题排查结论

这个现象不属于错误,是GraphQL.NET中间件的默认设计行为。

原因说明

你在Configure方法中注册了app.UseGraphQL<OrderQuerySchema>()中间件,该中间件会默认拦截发往/graphql端点的所有GraphQL请求,内部自动完成查询解析、参数绑定、执行逻辑,直接调用你定义的Schema对应的Query/ObjectGraphType处理,不需要经过自定义的控制器层。
如果你不需要在控制器层做统一的请求预处理,当前的运行逻辑是完全正常的,中间件处理的性能比自定义控制器更高。

如需让请求进入控制器的调整方案

如果你需要在控制器层做统一权限校验、日志埋点、请求限流等处理,可以按以下步骤调整:

  1. 移除Configure方法中的app.UseGraphQL<OrderQuerySchema>()中间件注册
  2. 新增自定义GraphQL控制器,手动实现查询执行逻辑,示例代码如下:
public class GraphQLQuery
{
    public string Query { get; set; }
    public JObject Variables { get; set; }
}

[ApiController]
[Route("graphql")]
public class GraphQLController : ControllerBase
{
    private readonly ISchema _schema;
    private readonly IDocumentExecuter _documentExecuter;

    public GraphQLController(ISchema schema, IDocumentExecuter documentExecuter)
    {
        _schema = schema;
        _documentExecuter = documentExecuter;
    }

    [HttpPost]
    public async Task<IActionResult> Execute([FromBody] GraphQLQuery query)
    {
        var executionOptions = new ExecutionOptions
        {
            Schema = _schema,
            Query = query.Query,
            Variables = query.Variables?.ToInputs()
        };

        var executionResult = await _documentExecuter.ExecuteAsync(executionOptions);
        if (executionResult.Errors != null && executionResult.Errors.Any())
        {
            return BadRequest(executionResult.Errors);
        }
        return Ok(executionResult);
    }
}
  1. 保持当前app.UseGraphiQl("/graphql")配置即可,GraphiQL发起的请求会自动匹配到你定义的/graphql控制器路由。

内容的提问来源于stack exchange,提问作者Nguyen Lam

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 16:39:02