private static void InnerApply(JToken item, AbstractModel abstractModel)
        {
            switch (item.Type)
            {
            case JTokenType.Array:
                foreach (var arrayValue in item.Values())
                {
                    InnerApply(arrayValue, abstractModel);
                }
                break;

            case JTokenType.Property:
                var property = (JProperty)item;
                var newModel = new AbstractModel(property.Name);
                abstractModel.Add(newModel);
                foreach (var child in item.Children())
                {
                    InnerApply(child, newModel);
                }
                break;

            case JTokenType.Boolean:
                abstractModel.AddValue(item.Value <bool>());
                break;

            case JTokenType.Integer:
                abstractModel.AddValue(item.Value <long>());
                break;

            case JTokenType.Float:
                abstractModel.AddValue(item.Value <decimal>());
                break;

            case JTokenType.Object:
                foreach (var child in item.Children())
                {
                    InnerApply(child, abstractModel);
                }
                break;

            case JTokenType.Comment:
            case JTokenType.Constructor:
                break;

            default:
                var value = item.Value <string>();
                if (value != null)
                {
                    abstractModel.AddValue(value);
                }
                break;
            }
        }
예제 #2
0
        public Task ApplyAsync(IAbstractModelApplicationRequestContext context, AbstractModel abstractModel,
                               CancellationToken cancellationToken)
        {
            foreach (var parameter in context.Query)
            {
                var subModel = new AbstractModel(parameter.Key);

                foreach (var value in parameter.Value)
                {
                    subModel.AddValue(value);
                }

                abstractModel.Add(subModel);
            }

            return(Task.FromResult(true));
        }
예제 #3
0
        public async Task ApplyAsync(IAbstractModelApplicationRequestContext context, AbstractModel abstractModel,
                                     CancellationToken cancellationToken)
        {
            var formCollection = await new FormFeature(context.Form).ReadFormAsync(cancellationToken);

            foreach (var key in formCollection.Keys)
            {
                var newModel = new AbstractModel(key);

                foreach (var value in formCollection[key])
                {
                    newModel.AddValue(value);
                }

                abstractModel.Add(newModel);
            }

            foreach (var file in formCollection.Files ?? new FormFileCollection())
            {
                var name = file.Name;

                if (name == null && ContentDispositionHeaderValue.TryParse(file.ContentDisposition,
                                                                           out var contentDispositionHeaderValue))
                {
                    name = contentDispositionHeaderValue.Name.Value;

                    if (name.StartsWith("\"") && name.EndsWith("\""))
                    {
                        name = name.Substring(1, name.Length - 2);
                    }
                }

                if (name != null)
                {
                    var newModel = new AbstractModel(name);
                    newModel.AddObjectValue(file);
                    abstractModel.Add(newModel);
                }
            }
        }