咨询:C#中是否有DerivativeAPI函数支持调用{urn}/metadata/{modelGuid}/properties:query接口
C#中封装Derivative API的properties:query端点函数
- 官方Forge .NET客户端的
DerivativesApi类目前未直接封装{urn}/metadata/{modelGuid}/properties:query端点,仅支持单objectId的属性查询操作。 - 你可以通过手动封装HTTP请求来实现该端点的多参数查询功能,以下是具体实现示例:
using System; using System.Net.Http; using System.Net.Http.Headers; using System.Text; using System.Threading.Tasks; using Newtonsoft.Json; public class ForgeDerivativesHelper { private readonly HttpClient _httpClient; private readonly string _accessToken; public ForgeDerivativesHelper(string accessToken) { _accessToken = accessToken; _httpClient = new HttpClient { BaseAddress = new Uri("https://developer.api.autodesk.com/") }; _httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", accessToken); } /// <summary> /// 封装properties:query端点,支持多参数复杂查询 /// </summary> /// <typeparam name="T">响应结果的类型</typeparam> /// <param name="urn">模型的URN(需Base64编码)</param> /// <param name="modelGuid">模型的Metadata GUID</param> /// <param name="queryPayload">查询条件体,参考API文档构造</param> /// <returns>查询结果</returns> public async Task<T> QueryPropertiesAsync<T>(string urn, string modelGuid, object queryPayload) { var requestUri = $"modelderivative/v2/designdata/{urn}/metadata/{modelGuid}/properties:query"; var jsonContent = JsonConvert.SerializeObject(queryPayload); var httpContent = new StringContent(jsonContent, Encoding.UTF8, "application/json"); var response = await _httpClient.PostAsync(requestUri, httpContent); response.EnsureSuccessStatusCode(); var responseJson = await response.Content.ReadAsStringAsync(); return JsonConvert.DeserializeObject<T>(responseJson); } } // 使用示例 public class QueryUsage { public async Task ExecuteQuery() { string accessToken = "YOUR_FORGE_ACCESS_TOKEN"; string modelUrn = "BASE64_ENCODED_MODEL_URN"; string modelGuid = "METADATA_GUID_OF_THE_MODEL"; // 构造多参数查询条件,可根据API需求自定义过滤规则 var queryBody = new { filter = new { type = "wall", properties = new[] { "Height", "FireRating" } }, include = new[] { "objectid", "name", "properties" }, limit = 50 }; var helper = new ForgeDerivativesHelper(accessToken); var queryResult = await helper.QueryPropertiesAsync<dynamic>(modelUrn, modelGuid, queryBody); // 处理查询结果 Console.WriteLine(JsonConvert.SerializeObject(queryResult, Formatting.Indented)); } }
- 说明:
queryPayload可根据API文档定义,构造任意复杂的过滤、包含、分页等参数,完全匹配端点的多参数查询能力。- 需确保传入的
accessToken拥有viewables:read权限。 - 建议定义强类型的请求体和响应体类,替代示例中的
dynamic,提升代码的类型安全性和可维护性。
内容的提问来源于stack exchange,提问作者user426118
相关产品推荐
相关产品推荐

