public async Task <IActionResult> CreateService(
            [Bind("Name, Type, GroupName, FullDescription")] EsbService newService)
        {
            if (ModelState.IsValid)
            {
                newService.ActiveStatus      = 1;
                newService.CreatedOn         = DateTime.Now;
                newService.ServiceDescriptor = "";

                _esbModelContext.Services.Add(newService);
                await _esbModelContext.SaveChangesAsync();

                return(RedirectToAction(nameof(Index)));
            }
            return(View(newService));
        }
Exemple #2
0
        public async Task <IActionResult> Create(int serviceId)
        {
            EsbService service = await _esbModelContext.Services.FindAsync(serviceId);

            if (service == null)
            {
                return(RedirectToAction(nameof(Create)));
            }
            InstanceViewModel viewModel = new InstanceViewModel
            {
                ActiveStatus      = true,
                Description       = service.FullDescription,
                InstanceName      = service.Name,
                ServiceID         = service.ID,
                ServiceName       = service.Name,
                ParameterMappings = new List <ParameterMapping>()
            };

            // create default mappings
            if (service.Type == ServiceType.SimpleRESTful)
            {
                var descriptor = JsonConvert.DeserializeObject <SimpleRestfulDescriptorViewModel>(service.ServiceDescriptor);
                if (descriptor == null)
                {
                    throw new Exception($"选择的服务{service.Name}尚未定义服务协定");
                }
                if (!string.IsNullOrWhiteSpace(descriptor.RouteDataTemplate))
                {
                    string[] parts = descriptor.RouteDataTemplate.Split(new char[] { '/' }, StringSplitOptions.RemoveEmptyEntries);
                    for (int i = 0; i < parts.Length; i++)
                    {
                        string s = parts[i].Trim();
                        viewModel.ParameterMappings.Add(new ParameterMapping
                        {
                            Source      = "route",
                            ServerPath  = s,
                            MappingType = MappingType.Path,
                            ClientPath  = s
                        });
                    }
                }
                if (!string.IsNullOrWhiteSpace(descriptor.QueryStringTemplate))
                {
                    StringHelper.MapQueryFormParametersInto(viewModel.ParameterMappings, "query", descriptor.QueryStringTemplate);
                }
                if (!string.IsNullOrWhiteSpace(descriptor.FormBodyTemplate))
                {
                    StringHelper.MapQueryFormParametersInto(viewModel.ParameterMappings, "form", descriptor.FormBodyTemplate);
                }
                if (descriptor.JsonBodyTemplate != null)
                {
                    //优先级最高的是JSON模板
                    descriptor.JsonBodyTemplate.GenerateMappingInto(viewModel.ParameterMappings, "", "");
                }
            }
            else if (service.Type == ServiceType.NCWebService)
            {
                var descriptor = JsonConvert.DeserializeObject <NCDescriptorViewModel>(service.ServiceDescriptor);
                if (descriptor == null)
                {
                    throw new Exception($"选择的服务{service.Name}尚未定义服务协定");
                }
                if (descriptor.ParameterBody != null)
                {
                    descriptor.ParameterBody.GenerateMappingInto(viewModel.ParameterMappings, "", "");
                }
            }
            else if (service.Type == ServiceType.PrimetonService)
            {
                var descriptor = JsonConvert.DeserializeObject <PrimetonDescriptorViewModel>(service.ServiceDescriptor);
                if (descriptor == null)
                {
                    throw new Exception($"选择的服务{service.Name}尚未定义服务协定");
                }
                if (descriptor.InputBody != null)
                {
                    descriptor.InputBody.GenerateMappingInto(viewModel.ParameterMappings, "", "");
                }
            }
            else
            {
                throw new Exception("使用了尚未实现的服务类型");
            }

            TempData.Put(CROSS_VIEWMODEL_KEY, viewModel);
            return(RedirectToAction(nameof(Edit)));
        }