async Task InvokeWithErrorConneg(ICommunicationContext env) { var exceptionHappened = false; try { await _responsePipeline.Invoke(env); } catch (Exception e) { env.ServerErrors.Add(new Error { Exception = e }); exceptionHappened = true; } log.WriteInfo($"Exception: {exceptionHappened}, Errors: {env.ServerErrors.Count()}, State: {env.PipelineData.PipelineStage.CurrentState}"); if (exceptionHappened) { env.SetOperationResultToServerErrors(); } if (exceptionHappened || env.PipelineData.PipelineStage.CurrentState == PipelineContinuation.RenderNow) { env.PipelineData.PipelineStage.CurrentState = PipelineContinuation.Continue; env.PipelineData.ResponseCodec = null; try { log.WriteInfo($"Trying to re-render"); await _responsePipeline.Invoke(env); log.WriteInfo($"Errors: {env.ServerErrors.Count()}, State: {env.PipelineData.PipelineStage.CurrentState}"); if (env.PipelineData.PipelineStage.CurrentState == PipelineContinuation.RenderNow) { throw new PipelineAbortedException(env.ServerErrors); } } catch (Exception e) { env.ServerErrors.Add(new Error { Exception = e }); #pragma warning disable 618 // set for compatibility env.PipelineData.PipelineStage.CurrentState = PipelineContinuation.Abort; #pragma warning restore 618 throw new PipelineAbortedException(env.ServerErrors); } } }
public static void Abort(this ICommunicationContext context, Exception e = null) { #pragma warning disable 618 context.PipelineData.PipelineStage.CurrentState = PipelineContinuation.Abort; #pragma warning restore 618 if (e != null) { context.ServerErrors.Add(new Error { Exception = e }); } context.SetOperationResultToServerErrors(); context.PipelineData.ResponseCodec = null; context.Response.StatusCode = 500; context.Response.Entity.Instance = context.ServerErrors.ToList(); context.Response.Entity.Codec = null; context.Response.Entity.ContentLength = null; }
async Task <bool> ShouldRetryRendering(ICommunicationContext env) { try { await _responsePipeline.Invoke(env); if (env.PipelineData.PipelineStage.CurrentState != PipelineContinuation.RenderNow) { return(false); } } catch (Exception e) { env.ServerErrors.Add(new Error { Exception = e }); env.SetOperationResultToServerErrors(); } return(true); }