public async Task InvokeAsync(HttpContext context, TDbContext dbContext) { if (!_restApiRouteResolver.Resolve(context, out var routeParams)) { await _next(context); return; } var restApiRequestContext = new RestApiRequestContext() { HttpContext = context, DbContext = dbContext, RouteParams = routeParams, Options = _options, Source = _source, DbSetExecutorFactory = _dbSetExecutorFactory, }; var handler = _restApiRequestHandlerFactory.Create(restApiRequestContext); if (handler == null) { await _next(context); return; } if (!await handler.TryHandleAsync(restApiRequestContext)) { await _next(context); return; } }
public async Task <bool> TryHandleAsync(RestApiRequestContext context) { var executor = context.DbSetExecutorFactory.Create(context.DbContext, context.RouteParams.RestSetName); if (executor == null) { return(false); } if (context.RouteParams.ResourceId is null) { return(false); } await executor.DeleteAsync(context.RouteParams.ResourceId); context.HttpContext.Response.StatusCode = 204; return(true); }
public async Task <bool> TryHandleAsync(RestApiRequestContext context) { var executor = context.DbSetExecutorFactory.Create(context.DbContext, context.RouteParams.RestSetName); if (executor == null) { return(false); } if (context.HttpContext.Request.ContentType != "application/json") { return(false); } if (context.RouteParams.ResourceId is null) { return(false); } using (var reader = new StreamReader(context.HttpContext.Request.Body, Encoding.UTF8)) { var body = await reader.ReadToEndAsync(); var entity = JsonConvert.DeserializeObject(body, executor.EntityType); if (entity != null) { await executor.UpdateAsync(context.RouteParams.ResourceId, entity); var json = JsonConvert.SerializeObject(entity); await context.HttpContext.Response.WriteAsync(json); return(true); } } return(false); }
public async Task <bool> TryHandleAsync(RestApiRequestContext context) { var executor = context.DbSetExecutorFactory.Create(context.DbContext, context.RouteParams.RestSetName); if (executor == null) { return(false); } if (context.RouteParams.ResourceId != null) { var entity = await executor.GetSingleAsync(context.RouteParams.ResourceId); if (entity != null) { var json = JsonConvert.SerializeObject(entity); await context.HttpContext.Response.WriteAsync(json); return(true); } } else { var entities = await executor.GetCollectionAsync(); if (entities != null) { var json = JsonConvert.SerializeObject(entities); await context.HttpContext.Response.WriteAsync(json); return(true); } } return(false); }