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);
            }
        }
Beispiel #2
0
        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);
            }
        }