public async Task Dispatch(DashboardContext context) { if (!"POST".Equals(context.Request.Method, StringComparison.InvariantCultureIgnoreCase)) { context.Response.StatusCode = 405; return; } try { var infoKey = context.Request.GetQuery(StandbyKey.IdField); var standbyJob = Map.JobCollection[infoKey]; var parameters = await StandbyHelper.CreateParameters(context, standbyJob.Method); var queuedState = new EnqueuedState(); if (standbyJob.UseQueue) { var queueString = (await context.Request.GetFormValuesAsync("equeued_state")).LastOrDefault(); queuedState.Queue = queueString; } var jobId = context.GetBackgroundJobClient().Create(new Job(standbyJob.Method, parameters), queuedState); context.Response.StatusCode = 200; await context.Response.WriteAsync(jobId); } catch (Exception e) { context.Response.StatusCode = 500; await context.Response.WriteAsync(e.Message); } }
public async Task Dispatch(DashboardContext context) { if (!"POST".Equals(context.Request.Method, StringComparison.InvariantCultureIgnoreCase)) { context.Response.StatusCode = 405; return; } try { var missionId = context.Request.GetQuery(Mission.IdField); var mission = MissionMap.Missions[missionId]; var(parameters, errors) = await CreateParameters(context, mission.MethodInfo); if (errors.Length > 0) { context.Response.StatusCode = 400; var errorBuilder = new StringBuilder(); errorBuilder.Append("Missing parameters: "); errorBuilder.Append(string.Join(", ", errors.Where(x => x.error == ErrorType.Missing).Select(x => x.fieldName))); var invalid = string.Join(", ", errors.Where(x => x.error == ErrorType.Invalid).Select(x => x.fieldName)); if (!string.IsNullOrWhiteSpace(invalid)) { errorBuilder.Append("<br/>"); errorBuilder.Append("Invalid parameters: "); errorBuilder.Append(invalid); } await context.Response.WriteAsync(errorBuilder.ToString()); } else { var jobId = context.GetBackgroundJobClient().Create(new Job(mission.MethodInfo, parameters), new EnqueuedState(mission.Queue)); context.Response.StatusCode = 201; await context.Response.WriteAsync(jobId); } } catch (Exception e) { context.Response.StatusCode = 500; await context.Response.WriteAsync(e.Message); } }