Beispiel #1
0
        public async Task Invoke(HttpContext httpContext, IServiceProvider injector)
        {
            var path = httpContext.Request.Path.Value;

            var renderer = registry.FindPaperRenderer(path);

            if (renderer == null)
            {
                await next(httpContext);

                return;
            }

            var req = httpContext.Request;
            var res = httpContext.Response;

            var ret    = RenderEntity(httpContext, injector, renderer);
            var entity = ret.Data ?? HttpEntity.CreateFromRet(req.GetRequestUri(), ret);

            var contentType = HttpNegotiation.SelectContentType(req);
            var encoding    = HttpNegotiation.SelectEncoding(req);

            var serializer = new MediaSerializer(contentType);
            var data       = serializer.Serialize(entity);

            res.StatusCode  = ret.Status;
            res.ContentType = $"{contentType}; charset={encoding.HeaderName}";

            await res.WriteAsync(data, encoding);
        }
        private async Task SendStatusAsync(HttpContext httpContext, Ret ret)
        {
            var req = httpContext.Request;
            var res = httpContext.Response;

            var entity =
                (ret.Value as Entity)
                ?? HttpEntity.CreateFromRet(req.GetRequestUri(), ret);

            var contentType = HttpNegotiation.SelectContentType(req);
            var encoding    = HttpNegotiation.SelectEncoding(req);

            var serializer = new MediaSerializer(contentType);
            var data       = serializer.Serialize(entity);

            res.StatusCode  = ret.Status;
            res.ContentType = $"{contentType}; charset={encoding.HeaderName}";

            await res.WriteAsync(data, encoding);
        }