diff --git a/src/Nancy/NancyEngine.cs b/src/Nancy/NancyEngine.cs index ea9aa88d0f..f5b2815c42 100644 --- a/src/Nancy/NancyEngine.cs +++ b/src/Nancy/NancyEngine.cs @@ -197,13 +197,23 @@ private void CheckStatusCodeHandler(NancyContext context) return; } - foreach (var statusCodeHandler in this.statusCodeHandlers) + var handlers = this.statusCodeHandlers + .Where(x => x.HandlesStatusCode(context.Response.StatusCode, context)) + .ToList(); + + var defaultHandler = handlers + .FirstOrDefault(x => x is DefaultStatusCodeHandler); + + var customHandler = handlers + .FirstOrDefault(x => !(x is DefaultStatusCodeHandler)); + + var handler = customHandler ?? defaultHandler; + if (handler == null) { - if (statusCodeHandler.HandlesStatusCode(context.Response.StatusCode, context)) - { - statusCodeHandler.Handle(context.Response.StatusCode, context); - } + return; } + + handler.Handle(context.Response.StatusCode, context); } private Task InvokeRequestLifeCycle(NancyContext context, CancellationToken cancellationToken, IPipelines pipelines)