public async Task <HttpResponseMessage> Insert() { var user = GetSessionUser(Request.Headers.GetCookies().FirstOrDefault()); List <NodeDto> successEntity = new List <NodeDto>(); //成功处理的Entity信息 JDBCEntity currentEntity = null; //当前处理的Entity信息 try { Uri uri = ParseToQueryUri(Request.RequestUri); List <JDBCEntity> parents = (await MyCoreApi.FindNodeByUriAsync(uri)).ToList(); //根据uri查找父节点 if (uri.PathAndQuery.Equals("/path/") || uri.PathAndQuery.Equals("/id/")) //添加根节点的情形 { parents.Add(new Experiment { Id = Guid.Empty }); } else if (parents.Count() == 0)//根节点不存在 { throw new Exception("Parent node not exist!"); } NameValueCollection form = Request.Content.ReadAsFormDataAsync().Result; JDBCEntity newNode = null; var type = GetValueFromForm(form, "type"); var name = GetValueFromForm(form, "name"); var extras = GetValuesFromForm(form, "extra[]", true); if (string.IsNullOrWhiteSpace(name)) { throw new Exception("Entity name can not be empty!"); } switch (type.ToLower()) { case "experiment": { newNode = new Experiment(name); } break; case "signal": { var init = GetValueFromForm(form, "init"); var datatype = GetValueFromForm(form, "datatype"); newNode = MyCoreApi.CreateSignal(datatype, name, init.Replace(";", "&").Replace(",", "&").Trim("'\"()[]{}".ToCharArray())); } break; default: throw new Exception("Entity type is not supported!"); } if (extras != null)//添加ExtraInformation { foreach (var extra in extras) { var index = extra.IndexOf(":::"); if (index < 0) { return(new HttpResponseMessage(HttpStatusCode.Forbidden)); } var key = extra.Substring(0, index); var value = extra.Substring(index + 3); if (key.Equals("") || value.Equals("") || newNode.IfExtraInformationContainsKey(key)) { return(new HttpResponseMessage(HttpStatusCode.Forbidden)); } newNode.AddExtraInformation(key, value); } } if (newNode == null) { return(new HttpResponseMessage { StatusCode = HttpStatusCode.Forbidden, Content = new StringContent("Failed to create new node!") }); } foreach (var parent in parents) { if (!await MyCoreApi.Authorization(parent.Id, user, "1")) { throw new Exception("Not authorization!"); } currentEntity = parent; newNode.Id = Guid.NewGuid(); newNode.SetUser(user.UserName); var node = await MyCoreApi.AddOneToExperimentAsync(parent.Id, newNode); //添加signal successEntity.Add(Mapper.Map <NodeDto>(node)); //保存处理结果 } return(new HttpResponseMessage { StatusCode = HttpStatusCode.OK, Content = new StringContent(SerializeObjectToString(successEntity), System.Text.Encoding.GetEncoding("UTF-8"), "application/json") }); } catch (Exception e) { if (currentEntity == null) { return(new HttpResponseMessage { StatusCode = HttpStatusCode.Forbidden, Content = new StringContent(e.Message) }); } var response = new ResponseEntityMessage { Fail = new { Description = e.InnerException != null ? e.InnerException.Message : e.Message, Id = currentEntity.Id, Path = currentEntity.Path }, Success = successEntity }; return(new HttpResponseMessage { StatusCode = HttpStatusCode.Forbidden, Content = new StringContent(SerializeObjectToString(response), System.Text.Encoding.GetEncoding("UTF-8"), "application/json") }); } }