protected override Task ProcessRequestAsync(HttpListenerContext context) { if (string.IsNullOrEmpty(context.Request.RawUrl)) return ((object)null).AsTaskResult(); var operationName = context.Request.GetOperationName(); var httpReq = context.ToRequest(operationName); var httpRes = httpReq.Response; var handler = HttpHandlerFactory.GetHandler(httpReq); var serviceStackHandler = handler as IServiceStackHandler; if (serviceStackHandler != null) { var restHandler = serviceStackHandler as RestHandler; if (restHandler != null) { httpReq.OperationName = operationName = restHandler.RestPath.RequestType.Name; } var task = serviceStackHandler.ProcessRequestAsync(httpReq, httpRes, operationName); task.ContinueWith(x => httpRes.Close()); return task; } return new NotImplementedException("Cannot execute handler: " + handler + " at PathInfo: " + httpReq.PathInfo) .AsTaskException(); }
private static IHttpRequest CreateHttpRequest(HttpListenerContext context) { var operationName = context.Request.GetOperationName(); var httpReq = context.ToRequest(operationName); return httpReq; }
public static void HandleError(Exception ex, HttpListenerContext context) { try { Log.ErrorFormat("Error this.ProcessRequest(context): [{0}]: {1}", ex.GetType().GetComplexTypeName(), ex.Message); var errorResponse = new ErrorResponse { ResponseStatus = new ResponseStatus { ErrorCode = ex.GetType().GetComplexTypeName(), 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) { var error = "Error this.ProcessRequest(context)(Exception while writing error to the response): [{0}]: {1}" .Fmt(errorEx.GetType().GetComplexTypeName(), errorEx.Message); Log.ErrorFormat(error); } }
protected override Task ProcessRequestAsync(HttpListenerContext context) { if (string.IsNullOrEmpty(context.Request.RawUrl)) return ((object)null).AsTaskResult(); var operationName = context.Request.GetOperationName().UrlDecode(); var httpReq = context.ToRequest(operationName); var httpRes = httpReq.Response; var handler = HttpHandlerFactory.GetHandler(httpReq); var serviceStackHandler = handler as IServiceStackHandler; if (serviceStackHandler != null) { var restHandler = serviceStackHandler as RestHandler; if (restHandler != null) { httpReq.OperationName = operationName = restHandler.RestPath.RequestType.GetOperationName(); } var task = serviceStackHandler.ProcessRequestAsync(httpReq, httpRes, operationName); task.ContinueWith(x => httpRes.Close(), TaskContinuationOptions.OnlyOnRanToCompletion | TaskContinuationOptions.AttachedToParent); //Matches Exceptions handled in HttpListenerBase.InitTask() return task; } return new NotImplementedException("Cannot execute handler: " + handler + " at PathInfo: " + httpReq.PathInfo) .AsTaskException(); }