// POST: api/Utilities.svc/LifeCycles public async Task<IHttpActionResult> Post(LifeCycle lifeCycle) { var declaringType = System.Reflection.MethodBase.GetCurrentMethod().DeclaringType; var fn = String.Format("{0}:{1}", declaringType.Namespace, declaringType.Name); if (!ModelState.IsValid) { return BadRequest(ModelState); } Debug.WriteLine(fn); // TODO: Add create logic here. // return Created(LifeCycle); return StatusCode(HttpStatusCode.NotImplemented); }
// PUT: api/Utilities.svc/LifeCycles(5) public async Task<IHttpActionResult> Put([FromODataUri] String key, LifeCycle lifeCycle) { var declaringType = System.Reflection.MethodBase.GetCurrentMethod().DeclaringType; var fn = String.Format("{0}:{1}", declaringType.Namespace, declaringType.Name); if (!ModelState.IsValid) { Debug.WriteLine("Entity to be changed by LifeCycleManager with id '{0}' has invalid ModelState.", key); return BadRequest(ModelState); } if (key != lifeCycle.Id) { return BadRequest(); } try { Debug.WriteLine(fn); var identity = CurrentUserDataProvider.GetIdentity(TenantId); var permissionId = CreatePermissionId("CanUpdate"); if (!identity.Permissions.Contains(permissionId)) { return StatusCode(HttpStatusCode.Forbidden); } var entityUri = new Uri(key); var entity = LoadEntity(new DefaultAuthenticationProvider(), entityUri); var lifeCycleManager = new LifeCycleManager(new DefaultAuthenticationProvider(), ExtractTypeFromUriString(key)); lifeCycleManager.RequestStateChange(entityUri, entity, lifeCycle.Condition, identity.Tid); return Ok(); } catch (UriFormatException e) { return BadRequest("Invalid Id - Id has to be a valid URI"); } catch (HttpRequestException e) { return BadRequest("Loading entity from passed Uri failed (Either not found or not authorized)"); } catch (InvalidOperationException e) { return BadRequest(String.Format("Changing state with provided condition: '{0}' not possible", lifeCycle.Condition)); } catch (Exception e) { Debug.WriteLine(String.Format("{0}: {1}\r\n{2}", e.Source, e.Message, e.StackTrace)); throw; } }