예제 #1
0
        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);
        }
예제 #3
0
        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);
        }
예제 #4
0
        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);
        }