Ejemplo n.º 1
0
    private void ServeHeaders(HttpResponse response, string filename, Components.HttpServerOptions options)
    {
        if (_contentTypeProvider.TryGetContentType(filename, out var contentType))
        {
            response.ContentType = contentType;
        }

        if (options.CacheControl is { } cacheControl)
        {
            response.Headers.Add(HeaderNames.CacheControl, cacheControl);
        }
    }
Ejemplo n.º 2
0
    private async Task <bool> ServeBody(HttpResponse response, Components.IFileInfo fileInfo, Components.HttpServerOptions options, CancellationToken cancellationToken)
    {
        var length = fileInfo.Length;

        if (length > options.MaxBufferedLength)
        {
            return(await fileInfo.CopyTo(response.Body, cancellationToken));
        }

        await using var buffer = (RecyclableMemoryStream)_streamManager.GetStream();
        if (!await fileInfo.CopyTo(buffer, cancellationToken))
        {
            return(false);
        }

        response.ContentLength = length;
        foreach (var segment in buffer.GetReadOnlySequence())
        {
            await response.BodyWriter.WriteAsync(segment, cancellationToken);
        }

        return(true);
    }