/// <summary> /// Processes a request to process datasets. /// </summary> /// <param name="context"> /// An <see cref="HttpContext"/> object that provides references to the intrinsic /// server objects (for example, Request, Response, Session, and Server) used /// to service HTTP requests. /// </param> public void ProcessRequest(HttpContext context) { string method = context.Request["_method"] ?? context.Request.HttpMethod; try { Global.VerifySession(context.Request); switch (method) { case WebRequestMethods.Http.Post: HttpPostedFile file = context.Request.Files[0]; var str = new StreamReader(file.InputStream).ReadToEnd(); this.WriteObject(context, str); break; default: throw new InvalidOperationException(); } } catch (InvalidSessionException e) { JObject jobj = context.HandleWebServiceException(e, true, HttpStatusCode.BadRequest, ExceptionMessages.SessionExpired); context.Response.Write(JsonConvert.SerializeObject(jobj)); } catch (SecurityException e) { bool rethrow = ExceptionPolicy.HandleException(e, "Default"); if (rethrow) { throw; } JObject jobj = context.HandleWebServiceException(e, false, HttpStatusCode.BadRequest, e.Message); this.WriteObject(context, jobj); } catch (Exception e) { bool rethrow = ExceptionPolicy.HandleException(e, "Default"); if (rethrow) { throw; } JObject jobj = context.HandleWebServiceException(e, false, HttpStatusCode.InternalServerError, e.Message); this.WriteObject(context, jobj); } }
/// <summary> /// Processes a request to upload a form's avatar data. /// </summary> /// <param name="context"> /// An <see cref="HttpContext"/> object that provides references to the intrinsic /// server objects (for example, Request, Response, Session, and Server) used /// to service HTTP requests. /// </param> public void ProcessRequest(HttpContext context) { string formId = context.Request["formId"]; string version = context.Request["formVersion"]; string method = context.Request["_method"] ?? context.Request.HttpMethod; try { WorkbenchManager manager = Global.DependencyInjectionContainer.Resolve<WorkbenchManager>(); SessionData sessionData = Global.VerifySession(context.Request); ProductAvatarData avatarData; int versionOut; int? versionNumber = int.TryParse(version, out versionOut) ? versionOut : new int?(); switch (method) { case WebRequestMethods.Http.Post: HttpPostedFile file = context.Request.Files[0]; if (!file.ContentType.ToLower().Contains("image")) { throw new InvalidOperationException(ExceptionMessages.NonImageType); } byte[] avatarBytes = this.FormatImage(file.InputStream); avatarData = manager.SetProductAvatar(sessionData, formId, versionNumber, avatarBytes, file.ContentType); this.WriteObject(context, avatarData); break; case WebRequestMethods.Http.Get: avatarData = manager.GetProductAvatar(formId, versionNumber); if (avatarData != null && avatarData.HasAvatar) { using (MemoryStream ms = new MemoryStream(avatarData.FileData)) { ms.WriteTo(context.Response.OutputStream); } context.Response.ContentType = avatarData.MimeType; context.Response.Flush(); context.ApplicationInstance.CompleteRequest(); } break; case "DELETE": avatarData = manager.SetProductAvatar(sessionData, formId, versionNumber, new byte[0], null); this.WriteObject(context, avatarData); break; } } catch (InvalidSessionException e) { JObject jobj = context.HandleWebServiceException(e, true, HttpStatusCode.BadRequest, ExceptionMessages.SessionExpired); context.Response.Write(JsonConvert.SerializeObject(jobj)); } catch (SecurityException e) { bool rethrow = ExceptionPolicy.HandleException(e, "Default"); if (rethrow) { throw; } JObject jobj = context.HandleWebServiceException(e, false, HttpStatusCode.BadRequest, e.Message); this.WriteObject(context, jobj); } catch (Exception e) { bool rethrow = ExceptionPolicy.HandleException(e, "Default"); if (rethrow) { throw; } JObject jobj = context.HandleWebServiceException(e, false, HttpStatusCode.InternalServerError, e.Message); this.WriteObject(context, jobj); } }
/// <summary> /// Processes a request to export workbench data. /// </summary> /// <param name="context"> /// An <see cref="HttpContext"/> object that provides references to the intrinsic /// server objects (for example, Request, Response, Session, and Server) used /// to service HTTP requests. /// </param> public void ProcessRequest(HttpContext context) { string method = context.Request["_method"] ?? context.Request.HttpMethod; try { WorkbenchManager manager = Global.DependencyInjectionContainer.Resolve<WorkbenchManager>(); SessionData sessionData = Global.VerifySession(context.Request); switch (method) { case WebRequestMethods.Http.Post: this.Export(context, sessionData, manager); break; case WebRequestMethods.Http.Put: bool validateOnly; bool.TryParse(context.Request["validationOnly"], out validateOnly); this.Import(context, sessionData, validateOnly); break; default: throw new InvalidOperationException(); } } catch (InvalidSessionException e) { JObject jobj = context.HandleWebServiceException(e, true, HttpStatusCode.BadRequest, ExceptionMessages.SessionExpired); context.Response.Write(JsonConvert.SerializeObject(jobj)); } catch (SecurityException e) { bool rethrow = ExceptionPolicy.HandleException(e, "Default"); if (rethrow) { throw; } JObject jobj = context.HandleWebServiceException(e, false, HttpStatusCode.BadRequest, e.Message); this.WriteObject(context, jobj); } catch (Exception e) { bool rethrow = ExceptionPolicy.HandleException(e, "Default"); if (rethrow) { throw; } JObject jobj = context.HandleWebServiceException(e, false, HttpStatusCode.InternalServerError, e.Message); this.WriteObject(context, jobj); } }