/// <summary>
        /// Validates an input object accessor request API model
        /// </summary>
        /// <param name="apiModel"></param>
        /// <returns></returns>
        public static IEnumerable <string> ValidateApiModel(this InputObjectAccessorRequestApiModel apiModel)
        {
            if (string.IsNullOrEmpty(apiModel.ObjectName))
            {
                yield return("[objectName] is required.");
            }

            if (string.IsNullOrEmpty(apiModel.ObjectProviderName))
            {
                yield return("[objectProviderName] is required.");
            }

            if (string.IsNullOrEmpty(apiModel.SignatureRsaKeyXml))
            {
                yield return("[signatureRsaKeyXml] is required.");
            }

            if (apiModel.ObjectMetadata == null)
            {
                yield return("[objectMetadata] is required.");
            }

            if (apiModel.ExecutionMetadata == null)
            {
                yield return("[executionMetadata] is required.");
            }
            else
            {
                foreach (var emError in apiModel.ExecutionMetadata.ValidateApiModel())
                {
                    yield return($"[executionMetadata]: {emError}");
                }
            }
        }
 /// <summary>
 /// Converts an input object accessor request API model to a core model
 /// </summary>
 /// <param name="apiModel"></param>
 /// <param name="objectName"></param>
 /// <returns></returns>
 public static InputObjectAccessorRequest ToCoreModel(this InputObjectAccessorRequestApiModel apiModel, string objectName) =>
 new InputObjectAccessorRequest
 {
     ExecutionMetadata  = apiModel.ExecutionMetadata.ToCoreModel(),
     ExpirationPeriod   = apiModel.ExpirationPeriod,
     ObjectMetadata     = apiModel.ObjectMetadata.ToCoreModel(objectName),
     ObjectProviderName = apiModel.ObjectProviderName,
     SignatureRsaKeyXml = apiModel.SignatureRsaKeyXml
 };
        public async Task <IActionResult> CalculateWriteableInputObjectAccessorAsync([FromBody] InputObjectAccessorRequestApiModel requestApiModel)
        {
            // Validate the input object request API model...

            var errors = requestApiModel.ValidateApiModel().ToList();

            // If we encounter any validation errors, respond with [400 Bad Request] + detailed error description...

            if (errors.Any())
            {
                return(BadRequest($"[{errors.Count}] error(s) occurred while attempting to process your request: {string.Join(' ', errors)}"));
            }

            // Convert the input object accessor request to its core model counterpart and attempt to obtain an object accessor...

            var ioAccessorRequest = requestApiModel.ToCoreModel(requestApiModel.ObjectName);
            var ioAccessor        = await ioAccessorProvider.GetWritableAccessorAsync(ioAccessorRequest);

            // Respond with [200 OK] + the accessor...

            return(Ok(ioAccessor));
        }