public async Task <ActionResult> TemplateDefinition(string libraryUrl = null, string xsnUrl = null, string templateName = null, bool includeTemplateXml = false, string instanceId = null) { try { using (var clientContext = GetSharePointContext()) { var userKey = SpManager.GetRealm(); if (xsnUrl != null) { var redirectTemplateName = await SQLTemplateStorageManager.FindRedirectTemplateName(userKey, xsnUrl); if (redirectTemplateName != null) { templateName = redirectTemplateName; xsnUrl = null; } } var manifest = await TemplateManager.ManifestWithProperties(clientContext, libraryUrl, xsnUrl, templateName, StorageContext, instanceId); if (manifest == null) { return(new HttpStatusCodeResult(HttpStatusCode.NotFound)); } var template = new TemplateDefinition { TemplateName = templateName, XsnUrl = xsnUrl, LibraryUrl = libraryUrl }; template.Files.Add(manifest.FormFile); if (!String.IsNullOrWhiteSpace(templateName)) { template.InitializeInstanceId(manifest); } var tasks = GetContentList(manifest, includeTemplateXml) .Select(item => GetTemplateFileOrFail(clientContext, libraryUrl, xsnUrl, templateName, template.InstanceId, item, StorageContext)) .ToList(); while (tasks.Count > 0) { var task = await Task.WhenAny(tasks); tasks.Remove(task); template.Files.Add(await task); } await CheckAndUpdateOpenCountAsync(templateName, userKey); CheckAndAddExpiryHeader(instanceId); return(new ObjectResult <TemplateDefinition>(template)); } } catch (Exception e) { return(new ObjectResult <ErrorModel>(ErrorModel.FromException(e))); } }