问题标签 [hotchocolate]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c# - 基于子集合的父级热巧克力自定义过滤器
我正在尝试使用热巧克力代码优先方法实现类似于此处描述的过滤模型。如果至少有一个演员符合某些标准,我需要过滤电影。模型如下所示:
似乎无法添加自定义过滤器,MoviesFileringTypeDef
因为它只允许使用Movie
类的属性,并且不接受集合。是否可以用热巧克力实现这样的过滤器?
asp.net-core - 在 Hot Chocolate 中使用授权时未调用 HandleRequirementAsync
我正在尝试在 Hot Chocolategraphql
服务器中实现基于策略的授权。我正在查看他们的文档并参考Microsoft 的指南
我希望HandleRequirementAsync()
每当调用 a 时都会User query
调用它。
- 我注册授权和
User Policy
inConfigureServices
- 我有
User requirement class
和handler
- 我声明了一个字段需要策略授权。
问题
运行此代码时。我希望HandleRequirementAsync
将被调用。此方法应始终成功。但是,在请求用户时。实际发生的是未调用该方法,并且该请求立即被以下响应拒绝:
c# - 如何使用 HotChocolate 和 EFCore 创建 GraphQL 部分更新
我正在尝试使用 Entity Framework Core 和 Hot Chocolate 创建一个 ASP.NET Core 3.1 应用程序。应用程序需要支持通过 GraphQL 创建、查询、更新和删除对象。有些字段需要有值。
创建、查询和删除对象不是问题,但是更新对象比较棘手。我要解决的问题是部分更新。
Entity Framework 使用以下模型对象首先通过代码创建数据库表。
我可以在数据库中创建一条记录,其突变定义如下:
目前,对象很小,但在项目完成之前,它们将拥有更多的领域。我需要放弃 GraphQL 的强大功能,只为那些已更改的字段发送数据,但是如果我使用相同的 InputObjectType 进行更新,我会遇到 2 个问题。
- 更新必须包括所有“必填”字段。
- 此更新尝试将所有未提供的值设置为其默认值。
为了避免这个问题,我查看了Optional<>
HotChocolate 提供的泛型类型。这需要定义一个新的“更新”类型,如下所示
将此添加到突变中
然后,UpdateWarehouse 方法只需要更新那些已提供值的字段。
虽然这有效,但它确实有几个主要缺点。
- 因为 Enity Framework 不理解
Optional<>
泛型类型,所以每个模型都需要 2 个类 - Update 方法需要对每个要更新的字段都有条件代码,这显然是不理想的。
实体框架可以与JsonPatchDocument<>
泛型类一起使用。这允许将部分更新应用于实体而无需自定义代码。但是,我正在努力寻找一种将其与 Hot Chocolate GraphQL 实现相结合的方法。
为了完成这项工作,我正在尝试创建一个自定义 InputObjectType,它的行为就像使用定义的属性Optional<>
并映射到JsonPatchDocument<>
. 这将通过在反射的帮助下为模型类中的每个属性创建自定义映射来工作。然而,我发现IsOptional
定义框架处理请求方式的某些属性 () 是 Hot Chocolate 框架的内部属性,无法从自定义类中的可覆盖方法访问。
我也考虑过方法
Optional<>
将 UpdateClass的属性映射到JsonPatchDocument<>
对象中- 使用代码编织生成具有
Optional<>
每个属性版本的类 - 首先覆盖 EF 代码以处理
Optional<>
属性
我正在寻找有关如何使用通用方法来实现这一点的任何想法,并避免需要为每种类型编写 3 个单独的代码块——这些代码块需要彼此保持同步。
.net - 如何设置自定义 GraphQL 端点?
最近开始在 .net core 3.1 项目中实现 GraphQL。最初从 GraphQL.NET 开始,它默认端点为https://localhost:44330/graphql。我最终删除了它并决定使用 Hot Chocolate,它将端点默认为简单的https://localhost:44330。我已经在互联网上搜寻了答案,但到目前为止都失败了。如何将端点配置为(例如:)https://localhost:44330/newname?我认为它可以在 app.UseGraphQL() 的某个地方完成,但我没有找到任何东西。任何帮助都会很棒。
好的,我找到了我完全忽略的设置:UseGraphQL 有两个重载,第一个是“PathString 路径”。
app.UseGraphQL("/newname")
希望这至少可以帮助另一个
authentication - 为中间件处理的单个路由指定身份验证方案
我有一个新的 ASP.Net Core 3 MVC 站点,已将 GraphQL 添加到HotChocolate中。我有用户使用基于 cookie 的身份验证和 Auth0 登录到 MVC 端:
但是对于 GraphQL 请求,我需要 JWT 身份验证,我会使用:
他们都独立工作正常。Cookie auth 允许控制器使用;JWT auth 允许使用 GQL。但我不知道如何获取控制器的 cookie 身份验证和/graphql
路由的 JWT。
一点上下文:HotChocolate 使用自定义中间件来处理进入/graphql
路由的请求。它不在控制器上,所以我不能只用Authorize
属性指定方案,因为没有控制器可以把它放在上面。
类似问题
- 在 ASP.NET Core 中结合 cookie 和令牌身份验证 - 此处的答案(“使用框架”)含糊不清且毫无帮助。
- 配置不同的授权/身份验证方案- 这是 .Net Core 1.1,而不是 3.1。API 发生了很大变化。试图调整它,但运行时错误说
DefaultSignInScheme
是必需的。
(还有一些其他的,主要专注于结合 REST 和 MVC,但它们都用于控制器,所以场景有点不同。)
angular - GraphQL 需要多个变量不能与 Angular-Apollo 一起正常工作
我首先要说,我挣扎的时间比我的骄傲想要承认的要长,并且推迟了询问,因为我不确定我会变得多清楚;但是,这里有。. .
我将 Angular 9 与 Apollo-Angular 一起使用,并且在访问没有变量或只有一个变量的 GraphQL 查询时没有问题。如果我添加多个,我绝对不成功。我创建了一个简单的服务,允许我创建动态查询,所以我有一个看起来像这样的变量类型:
Apollo-Angular 客户端将其视为下图中显示的类型。从我在文档中看到的所有内容来看,Apollo-Angular 应该能够获取任何给定的对象并将其转换为适合查询的执行,但同样……我还没有使用多个变量来实现这一点。
调用查询时,它看起来像这样:
这会在调试控制台中产生以下输出:
如果我将 Chrome 中显示的完全相同的内容复制到 GraphQL Playground 中,它会返回“无法解析变量。请转到变量编辑器并修复语法问题”</p>
我已经尝试了几个小时试图通过 WatchQuery 变量属性发送不同的方式。如果我尝试使用 JSON.stringify 将多个变量作为字符串发送,它在 Chrome 中显示如下:
如果我真的手动输入一个静态值,我从一开始就会遇到同样的问题,“无法解析变量……”</p>
如果我在操场上运行完全相同的东西……但只需添加引号(Chrome 中没有显示),我就成功了:
据我所知,无论我如何从 Appllo-Angular Query Watch 变量属性发送它,我都无法正确发送它。它发送正确的唯一时间是我只使用一个变量并且该变量恰好是一个整数。
有没有我可以/应该采取的替代方法?我只是在做这绝对不正确吗?
我的具体问题是使用 Angular 和 Apollo-Angular:
- 如何为 GraphQL 查询发送多个变量(first、order_by、where 等)?
- 如何在这些变量之一中发送多个项目(例如:“order_by”:“customerName.ASC、accountNumber.DESC、startDate.DESC”)?
编辑:我刚刚在GraphQL Specs中发现了这个:
我在想这意味着我需要在后端(.net core、EF.core 和 Hot Chocolate)中添加一个 InputType,它将在架构中生成一个 Input Type。我还没有弄清楚,但至少已经给出了一条新的冒险之路。
编辑:我的每种类型都有其中一种用于变量(唯一会改变的是括号中的内容“Get[AVOs]Variables”、“[AVO]Sort”、“[AVO]Filter”
“[x]Sort”是一个字符串,即:[fieldName].ASC 或 [fieldName].DESC,无论类型如何。过滤器的工作原理类似。我希望尽可能创建最通用、可重用的版本,以防止克隆相同的代码结构只是为了更改类型名称。
编辑:我能够通过这种方式编写变量来使变量正常工作,而不仅仅是尝试在一行中发送对象:
c# - 热巧克力 GraphQL - MaxExecutionDepth 不起作用
如何MaxExecutionDepth
在 Hot Chocolate GraphQL 中工作?这是我的代码:
我已经对此进行了测试,甚至更改MaxExecutionDepth
为 1,但我仍然可以执行 20 多个深度查询。
graphql - 带有参数子查询的 GraphQL 突变 - 写入时更新/转换数据库?
是否可以在 GraphQL 中添加对突变的查找?让我们说一个输入类型,其中一个属性是另一个查询的结果。
wheregenders ( name: { eq: "mail" } ) { id }
将只返回一个结果值
hotchocolate - 使用 Pure Code First Hot Chocolate GraphQL 的特定属性的日期类型
我首先在 Hot Chocolate 中使用纯代码,但我有 dateTime C# 类型,并且在 javascript 中时区转换不正确时遇到问题。所以我希望它输出一个 Date 而不是 DateTime 对象。现在我正在使用
但这是一种非常暴力的方法,因为现在我永远无法在 graphQL 中输出 DateTime 类型。
有没有办法在属性上放置一个属性或在某个地方设置它,以便类上的特定属性输出为日期而不是日期时间?
sorting - Hotchocolate, turn on/off sorting by field in a type
I expose my 'Example' class using IQueryable
and apply the [UseSorting]
attribute so the user can define the sort order of the results. This works fine and the Playground allows me to do exactly that.
But the 'Example' class has three properties and I only want 2 of them to be orderable by the user. It makes no sense for the user to order by the third property. How do you specify one of the properties of 'Example' to be excluded from the ordering middleware?