private void ErrorHandler(Exception ex, IRequest httpReq) { try { var httpRes = httpReq.Response; if (httpRes.IsClosed) { return; } var errorResponse = new ErrorResponse { ResponseStatus = new ResponseStatus { ErrorCode = ex.GetType().GetOperationName(), Message = ex.Message, StackTrace = ex.StackTrace } }; var contentType = httpReq.ResponseContentType; var serializer = HostContext.ContentTypes.GetResponseSerializer(contentType); if (serializer == null) { contentType = HostContext.Config.DefaultContentType; serializer = HostContext.ContentTypes.GetResponseSerializer(contentType); } var httpError = ex as IHttpError; if (httpError != null) { httpRes.StatusCode = httpError.Status; httpRes.StatusDescription = httpError.StatusDescription; } else { httpRes.StatusCode = 500; } httpRes.ContentType = contentType; serializer(httpReq, errorResponse, httpRes); httpRes.Close(); } catch { //_logger.ErrorException("Error this.ProcessRequest(context)(Exception while writing error to the response)", errorEx); } }
private static ErrorResponse ToErrorResponse(this Exception ex) { List<ResponseError> errors = null; // For some exception types, we'll need to extract additional information in debug mode // (for example, so people can fix errors in their pages). if (HostContext.DebugMode) { var compileEx = ex as HttpCompileException; if (compileEx != null && compileEx.Results.Errors.HasErrors) { errors = new List<ResponseError>(); foreach (var err in compileEx.Results.Errors) { errors.Add(new ResponseError { Message = err.ToString() }); } } } var dto = new ErrorResponse { ResponseStatus = new ResponseStatus { ErrorCode = ex.ToErrorCode(), Message = ex.Message, StackTrace = HostContext.DebugMode ? ex.StackTrace : null, Errors = errors } }; return dto; }
public static void WriteEncryptedError(IRequest req, byte[] cryptKey, byte[] authKey, byte[] iv, Exception ex, string description = null) { var error = new ErrorResponse { ResponseStatus = ex.ToResponseStatus() }; var responseBodyBytes = error.ToJson().ToUtf8Bytes(); var encryptedBytes = AesUtils.Encrypt(responseBodyBytes, cryptKey, iv); var authEncryptedBytes = HmacUtils.Authenticate(encryptedBytes, authKey, iv); var httpError = ex as IHttpError; req.Response.StatusCode = (int)HttpStatusCode.BadRequest; req.Response.StatusDescription = description ?? (httpError != null ? httpError.ErrorCode : ex.GetType().Name); var errorResponse = new EncryptedMessageResponse { EncryptedBody = Convert.ToBase64String(authEncryptedBytes) }; req.Response.ContentType = MimeTypes.Json; req.Response.Write(errorResponse.ToJson()); req.Response.EndRequest(); }
// Encrypted Messaging Errors before keys can be extracted have to be written unencrypted private static void WriteUnencryptedError(IRequest req, Exception ex, string description = null) { var errorResponse = new ErrorResponse { ResponseStatus = ex.ToResponseStatus() }; var httpError = ex as IHttpError; req.Response.StatusCode = ex.ToStatusCode(); req.Response.StatusDescription = description ?? (httpError != null ? httpError.ErrorCode : ex.GetType().Name); req.Response.ContentType = MimeTypes.Json; req.Response.Write(errorResponse.ToJson()); req.Response.EndRequest(); }
public static void WriteEncryptedError(IRequest req, byte[] aesKey, byte[] iv, Exception ex, string description = null) { var error = new ErrorResponse { ResponseStatus = ex.ToResponseStatus() }; var responseBody = error.ToJson(); var encryptedBody = AesUtils.Encrypt(responseBody, aesKey, iv); var httpError = ex as IHttpError; req.Response.StatusCode = (int) HttpStatusCode.BadRequest; req.Response.StatusDescription = description ?? (httpError != null ? httpError.ErrorCode : ex.GetType().Name); var errorResponse = new EncryptedMessageResponse { EncryptedBody = encryptedBody }; req.Response.ContentType = MimeTypes.Json; req.Response.Write(errorResponse.ToJson()); req.Response.EndRequest(); }
public static void HandleError(Exception ex, HttpListenerContext context, ILogger logger) { try { var errorResponse = new ErrorResponse { ResponseStatus = new ResponseStatus { ErrorCode = ex.GetType().GetOperationName(), Message = ex.Message, StackTrace = ex.StackTrace, } }; var operationName = context.Request.GetOperationName(); var httpReq = context.ToRequest(operationName); var httpRes = httpReq.Response; var contentType = httpReq.ResponseContentType; var serializer = HostContext.ContentTypes.GetResponseSerializer(contentType); if (serializer == null) { contentType = HostContext.Config.DefaultContentType; serializer = HostContext.ContentTypes.GetResponseSerializer(contentType); } var httpError = ex as IHttpError; if (httpError != null) { httpRes.StatusCode = httpError.Status; httpRes.StatusDescription = httpError.StatusDescription; } else { httpRes.StatusCode = 500; } httpRes.ContentType = contentType; serializer(httpReq, errorResponse, httpRes); httpRes.Close(); } catch (Exception errorEx) { logger.ErrorException("Error this.ProcessRequest(context)(Exception while writing error to the response)", errorEx); } }