日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

GraphQL:Descriptor Attributes

發布時間:2023/12/4 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 GraphQL:Descriptor Attributes 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

GraphQL 既是一種用于 API 的查詢語言也是一個滿足你數據查詢的運行時。GraphQL 對你的 API 中的數據提供了一套易于理解的完整描述,使得客戶端能夠準確地獲得它需要的數據,而且沒有任何冗余,也讓 API 更容易地隨著時間推移而演進,還能用于構建強大的開發者工具。

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??——出自?https://graphql.cn

HotChocolate中可以通過定義Attribute來增加通用性處理功能,之前博文中用過UsePaging分頁,UseFiltering過濾,UseSorting排序,我們也可以自定義特性類來達到處理統一數據的作用,下面的例子就是一個脫敏的特性類,可以在使用特性類時告訴系統那些數據是不顯示出來的,此類就會把數據變成等長的*號字符串來替換。

using HotChocolate; using HotChocolate.Data; using HotChocolate.Execution; using HotChocolate.Types; using HotChocolate.Types.Descriptors; using System; using System.Collections; using System.Collections.Generic; using System.Reflection;namespace GraphQLBase004 {class Program{static void Main(string[] args){DescriptorAttributeDemo.Run();}}public class DescriptorAttributeDemo{public static void Run(){var schema = SchemaBuilder.New().AddProjections().AddQueryType<Query>().Create();var executor = schema.MakeExecutable();Console.WriteLine(executor.Execute("{?user{id?userName?password?tel}?}").ToJson());Console.WriteLine("===============");Console.WriteLine(executor.Execute("{?users{id?userName?password?tel}?}").ToJson());}/// <summary>/// 查詢類/// </summary>public class Query{[UseProjection][UseDesensitization(SensitiveFields = new string[] { "password", "tel" })]public?User?GetUser(){return new User{Id = 1,UserName = "gsw",Tel = "13453467114",Password = "111111"};}[UseProjection][UseDesensitization(SensitiveFields = new string[] { "password", "tel" })]public?List<User>?GetUsers(){return new List<User>(){new User{Id = 1,UserName = "gsw",Tel = "13453467114",Password = "111111"},new User{Id = 1,UserName = "gsw",Tel = "13453467114",Password = "111111"}};}}/// <summary>/// 用戶/// </summary>public class User{public int Id { get; set; }public string UserName { get; set; }public string Tel { get; set; }public string Password { get; set; }}/// <summary>/// 脫敏特性類/// </summary>public class UseDesensitizationAttribute : ObjectFieldDescriptorAttribute{public string[] SensitiveFields{get; set;}public override void OnConfigure(IDescriptorContext context, IObjectFieldDescriptor descriptor, MemberInfo member){descriptor.Use(next => context =>{var obj = context.GetType().GetMethod("Parent").MakeGenericMethod(context.ObjectType.RuntimeType).Invoke(context, new object[0]);var resultObj = (member as MethodInfo).Invoke(obj, new object[0]);foreach (var proName in SensitiveFields){var resulttType = resultObj.GetType();//處理泛型集合if (resulttType.IsGenericType){foreach (var resultItem in (resultObj as IList)){SetValue(proName, resultItem.GetType(), resultItem);}}else{SetValue(proName, resulttType, resultObj);}void SetValue(string proName, Type type, object resultObj){var pro = type.GetProperty(proName, BindingFlags.IgnoreCase | BindingFlags.Instance | BindingFlags.Public);if (pro != null && pro.PropertyType.IsAssignableFrom(typeof(string))){var len = pro.GetValue(resultObj).ToString()?.Length;pro.SetValue(resultObj, "".PadLeft(len.Value, '*'));}}}context.Result = resultObj;return next.Invoke(context);});}}} }

執行結果:

創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

總結

以上是生活随笔為你收集整理的GraphQL:Descriptor Attributes的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。