Beispiel #1
0
        public Task HandleRequest(HttpContext context, Entity ent)
        {
            IGenericSPSerializer serializer = null;
            var defaultAccept = new List <Microsoft.Net.Http.Headers.MediaTypeHeaderValue>()
            {
                new Microsoft.Net.Http.Headers.MediaTypeHeaderValue("application/json")
            };
            var accept = context.Request.GetTypedHeaders().Accept ?? defaultAccept;

            if (accept.Count == 0)
            {
                // .Net Core 3 seems to use length 0 instead of null
                accept = defaultAccept;
            }

            foreach (var ser in serializers)
            {
                if (accept.Any(a => ser.SupportContentType(a)))
                {
                    serializer = ser;
                    break;
                }
            }
            if (serializer == null)
            {
                context.Response.StatusCode = 415;
                return(Task.CompletedTask);
            }
            if (this.sPMiddlewareOptions.RequireAuthenticated && context.User?.Identity == null)
            {
                context.Response.StatusCode = 401;
                return(Task.CompletedTask);
            }
            if (context.Request.Method == "GET")
            {
                return(HandleGetRequest(context, ent, serializer));
            }
            var method = ent.Methods[context.Request.Method];

            return(HandleBodyRequest(context, method, ent, serializer));
        }
Beispiel #2
0
        private async Task HandleGetRequest(HttpContext context, Entity ent, IGenericSPSerializer serializer)
        {
            var method  = ent.Methods["Get"];
            var request = context.Request;

            Dictionary <string, object> queryParameters;

            if (request.QueryString.HasValue)
            {
                var queryDictionary = Microsoft.AspNetCore.WebUtilities.QueryHelpers.ParseQuery(request.QueryString.Value);
                queryParameters = queryDictionary
                                  .ToDictionary(kv => kv.Key,
                                                kv => string.Join(",", kv.Value) as object);
            }
            else
            {
                queryParameters = new Dictionary <string, object>();
            }
            var cmd = GetCommandWithParameters(context, dbConnection, ent, method, queryParameters);

            await serializer.ReadResultToBody(context, cmd, method, ent);
        }
        protected async Task HandleGetRequest(HttpContext context, Entity ent, IGenericSPSerializer serializer)
        {
            var method  = ent.Methods[OperationType.Get];
            var request = context.Request;

            Dictionary <string, object> queryParameters;

#if NET48
            queryParameters = request.QueryString.AllKeys.ToDictionary(k => k,
                                                                       k => (object)request.QueryString.Get(k), StringComparer.CurrentCultureIgnoreCase);
#else
            if (request.QueryString.HasValue && request.QueryString.Value != null)
            {
                var queryDictionary = Microsoft.AspNetCore.WebUtilities.QueryHelpers.ParseQuery(request.QueryString.Value);
                queryParameters = queryDictionary
                                  .ToDictionary(kv => kv.Key,
                                                kv => string.Join(",", kv.Value) as object,
                                                StringComparer.CurrentCultureIgnoreCase);
            }
            else
            {
                queryParameters = new Dictionary <string, object>();
            }
#endif
            var cmd = await commandPreparation.GetCommandWithParameters(context, null, dbConnection, ent, method, queryParameters);

            var start = DateTime.UtcNow;
            foreach (var log in requestLoggers)
            {
                log.OnRequestStart(context, cmd);
            }
            await serializer.ReadResultToBody(new SerializationContext(cmd, context, method, ent));

            foreach (var log in requestLoggers)
            {
                log.OnRequestEnd(context, cmd, start);
            }
        }
Beispiel #4
0
        private async Task HandleBodyRequest(HttpContext context, Method method, Entity ent, IGenericSPSerializer serializer)
        {
            var request = context.Request;

            var    streamReader = new System.IO.StreamReader(request.Body);
            string json         = streamReader.ReadToEnd();
            var    js           = JsonConvert.DeserializeObject <Dictionary <string, object> >(json);
            var    cmd          = GetCommandWithParameters(context, dbConnection, ent, method, js);
            await serializer.ReadResultToBody(context, cmd, method, ent);
        }
        protected async Task HandleBodyRequest(HttpContext context, Method method, Entity ent, IGenericSPSerializer serializer)
        {
            var request = context.Request;
            Dictionary <string, object> parameterObject;

#if NET48
            var  cntType            = MediaTypeHeaderValue.Parse(request.ContentType);
            bool hasFormContentType = HasMultipartFormContentType(cntType) || HasApplicationFormContentType(cntType);
#else
            bool hasFormContentType = request.HasFormContentType;
#endif
            if (hasFormContentType)
            {
                parameterObject = new Dictionary <string, object>(StringComparer.CurrentCultureIgnoreCase);
#if NETFX
                foreach (var key in request.Form.AllKeys)
                {
                    parameterObject.Add(key, request.Form[key]);
                }
                foreach (var key in request.Files.AllKeys)
                {
                    parameterObject.Add(key, request.Files[key]);
                }
#else
                foreach (var item in request.Form)
                {
                    parameterObject.Add(item.Key, string.Join(",", item.Value));
                }
                foreach (var file in request.Form.Files)
                {
                    parameterObject.Add(file.Name, file);
                }
#endif
            }
            else
            {
#if NETFX
                var streamReader = new System.IO.StreamReader(request.InputStream);
#else
                var streamReader = new System.IO.StreamReader(request.Body);
#endif
                string json = await streamReader.ReadToEndAsync();

                parameterObject = new Dictionary <string, object>(StringComparer.CurrentCultureIgnoreCase);
                JsonConvert.PopulateObject(json, parameterObject);
            }
            var cmd = await commandPreparation.GetCommandWithParameters(context, null, dbConnection, ent, method, parameterObject);

            var start = DateTime.UtcNow;
            foreach (var log in requestLoggers)
            {
                log.OnRequestStart(context, cmd);
            }
            await serializer.ReadResultToBody(new SerializationContext(cmd, context, method, ent));

            foreach (var log in requestLoggers)
            {
                log.OnRequestEnd(context, cmd, start);
            }
        }