/// <summary> /// Handle the error code /// </summary> /// <param name="statusCode">Status code</param> /// <param name="context">The <see cref="NancyContext"/> instance of the current request.</param> /// <returns>Nancy Response</returns> public void Handle(HttpStatusCode statusCode, NancyContext context) { if (context.Response != null && context.Response.Contents != null && !ReferenceEquals(context.Response.Contents, Response.NoBody)) { return; } if (!this.errorMessages.ContainsKey(statusCode) || !this.errorPages.ContainsKey(statusCode)) { return; } var result = new DefaultStatusCodeHandlerResult(statusCode, this.errorMessages[statusCode], StaticConfiguration.DisableErrorTraces ? DisableErrorTracesTrueMessage : context.GetExceptionDetails()); try { context.Response = this.responseNegotiator.NegotiateResponse(result, context); context.Response.StatusCode = statusCode; return; } catch (ViewNotFoundException) { // No view will be found for `DefaultStatusCodeHandlerResult` // because it is rendered from embedded resources below } this.ModifyResponse(statusCode, context, result); }
/// <summary> /// Handle the status code. /// </summary> /// <param name="statusCode">The status code to handle</param> /// <param name="context">The current context</param> public void Handle(HttpStatusCode statusCode, NancyContext context) { if (context.Response?.Contents != null && !ReferenceEquals(context.Response.Contents, Response.NoBody)) { return; } if (!_checks.ContainsKey((int)statusCode)) { return; } Exception ex; dynamic result = new ExpandoObject(); if (context.TryGetException(out ex)) { result.Type = context.GetException().GetType(); result.Message = _checks[(int)statusCode]; result.StackTrace = context.GetExceptionDetails(); result.Target = $"{context.GetException().TargetSite.Module}.{context.GetException().TargetSite.Name}"; } else { result.Type = statusCode; result.Message = _checks[(int)statusCode]; result.StackTrace = ""; result.Target = ""; } try { context.Response = _responseNegotiator.NegotiateResponse(result, context); context.Response.StatusCode = statusCode; return; } catch (Exception) { // Move on to HTML view } // Wrap the exception in an HTML <pre> tag result.StackTrace = string.Concat("<pre>", context.GetExceptionDetails().Replace("<", ">").Replace(">", "<"), "</pre>"); result.StatusCode = statusCode; var response = _viewRenderer.RenderView(context, "views/errors/" + (int)statusCode + ".html", result); response.StatusCode = statusCode; context.Response = response; }
/// <summary> /// Handle the error code /// </summary> /// <param name="statusCode">Status code</param> /// <param name="context">The <see cref="NancyContext"/> instance of the current request.</param> /// <returns>Nancy Response</returns> public void Handle(HttpStatusCode statusCode, NancyContext context) { if (context.Response != null && context.Response.Contents != null && !ReferenceEquals(context.Response.Contents, Response.NoBody)) { return; } if (!this.errorMessages.ContainsKey(statusCode) || !this.errorPages.ContainsKey(statusCode)) { return; } Response existingResponse = null; if (context.Response != null) { existingResponse = context.Response; } // Reset negotiation context to avoid any downstream cast exceptions // from swapping a view model with a `DefaultStatusCodeHandlerResult` context.NegotiationContext = new NegotiationContext(); var details = !this.configuration.DisplayErrorTraces ? DisplayErrorTracesFalseMessage : string.Concat("<pre>", context.GetExceptionDetails().Replace("<", ">").Replace(">", "<"), "</pre>"); var result = new DefaultStatusCodeHandlerResult { Details = details, Message = this.errorMessages[statusCode], StatusCode = statusCode }; try { context.Response = this.responseNegotiator.NegotiateResponse(result, context); context.Response.StatusCode = statusCode; if (existingResponse != null) { context.Response.ReasonPhrase = existingResponse.ReasonPhrase; } return; } catch (ViewNotFoundException) { // No view will be found for `DefaultStatusCodeHandlerResult` // because it is rendered from embedded resources below } this.ModifyResponse(statusCode, context, result); }
private Response GetResponse(HttpStatusCode statusCode, NancyContext context) { var responseInfo = new ResponseInfo { StatusCode = (int)statusCode, Message = statusCode.ToString(), Reason = StaticConfiguration.DisableErrorTraces ? null : context.GetExceptionDetails() }; var nonHtmlResponse = TryProcessNonHtml(responseInfo, context); if (nonHtmlResponse != null) { return(nonHtmlResponse); } var viewName = ((int)statusCode).ToString(CultureInfo.InvariantCulture); var response = _viewRenderer.RenderView(context, viewName); return(response); }
/// <summary> /// Handle the error code /// </summary> /// <param name="statusCode">Status code</param> /// <param name="context">The <see cref="NancyContext"/> instance of the current request.</param> /// <returns>Nancy Response</returns> public void Handle(HttpStatusCode statusCode, NancyContext context) { if (context.Response != null && context.Response.Contents != null && !ReferenceEquals(context.Response.Contents, Response.NoBody)) { return; } if (!this.errorMessages.ContainsKey(statusCode) || !this.errorPages.ContainsKey(statusCode)) { return; } Response existingResponse = null; if (context.Response != null) { existingResponse = context.Response; } // Reset negotiation context to avoid any downstream cast exceptions // from swapping a view model with a `DefaultStatusCodeHandlerResult` context.NegotiationContext = new NegotiationContext(); var result = new DefaultStatusCodeHandlerResult(statusCode, this.errorMessages[statusCode], StaticConfiguration.DisableErrorTraces ? DisableErrorTracesTrueMessage : context.GetExceptionDetails()); try { context.Response = this.responseNegotiator.NegotiateResponse(result, context); context.Response.StatusCode = statusCode; if (existingResponse != null) { context.Response.ReasonPhrase = existingResponse.ReasonPhrase; } return; } catch (ViewNotFoundException) { // No view will be found for `DefaultStatusCodeHandlerResult` // because it is rendered from embedded resources below } this.ModifyResponse(statusCode, context, result); }
private static string PopulateErrorInfo(HttpStatusCode httpStatusCode, NancyContext context, string templateContents) { return(templateContents.Replace("[DETAILS]", StaticConfiguration.DisableErrorTraces ? String.Empty : context.GetExceptionDetails())); }
private static string PopulateErrorInfo(HttpStatusCode httpStatusCode, NancyContext context, string templateContents) { return templateContents.Replace("[DETAILS]", StaticConfiguration.DisableErrorTraces ? DisableErrorTracesTrueMessage : context.GetExceptionDetails()); }
public void Handle(HttpStatusCode statusCode, NancyContext context) { try { var response = _viewRenderer.RenderView(context, (_checks.Any(x => x == (int)statusCode) ? (int)statusCode : 500) + ".cshtml", context.GetExceptionDetails()); response.StatusCode = statusCode; context.Response = response; } catch (Exception) { RemoveCode((int)statusCode); context.Response.StatusCode = statusCode; } }