public SessionContractMetadata(Type contract, ActionMetadata initSession, ActionMetadata destroySession) { if (contract == null) throw new ArgumentNullException(nameof(contract)); if (initSession == null) throw new ArgumentNullException(nameof(initSession)); if (destroySession == null) throw new ArgumentNullException(nameof(destroySession)); Contract = contract; InitSession = initSession; DestroySession = destroySession; }
public virtual async Task HandleContractMetadataAsync(ServerActionContext context) { try { string result; string actionName = context.HttpContext.Request.Query["action"]; Bolt.Metadata.ActionMetadata action = null; if (!string.IsNullOrEmpty(actionName)) { action = _actionResolver.Resolve(context.Contract, actionName.AsReadOnlySpan()); } if (action == null) { var contractMetadata = CrateContractMetadata(context); result = JsonConvert.SerializeObject(contractMetadata, Formatting.Indented, CreateSettings()); } else { context.Action = action; ActionMetadata actionMetadata = new ActionMetadata(); if (context.Action.HasSerializableParameters) { actionMetadata.Parameters = context.Action.Parameters.Where(p => p.IsSerializable).Select(p => p.Name).ToArray(); } if (context.Action.HasResult) { actionMetadata.Response = context.Action.ResultType.Name; } result = JsonConvert.SerializeObject(actionMetadata, Formatting.Indented, CreateSettings()); } context.HttpContext.Response.ContentType = "application/json"; context.HttpContext.Response.StatusCode = 200; await context.HttpContext.Response.WriteAsync(result); } catch (Exception e) { Logger.LogWarning( BoltLogId.HandleContractMetadataError, "Failed to generate Bolt metadata for contract '{0}'. Error: {1}", context.Contract.Name, e); } }
public SessionContractMetadata(Type contract, ActionMetadata initSession, ActionMetadata destroySession) { Contract = contract ?? throw new ArgumentNullException(nameof(contract)); InitSession = initSession ?? throw new ArgumentNullException(nameof(initSession)); DestroySession = destroySession ?? throw new ArgumentNullException(nameof(destroySession)); }