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)); }
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); } }
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); } }