Beispiel #1
0
        public ActionResult Index()
        {
            VirtualFileResult response = File("index.html", "text/html");

            response.LastModified = DateTimeOffset.UtcNow;
            return(response);
        }
Beispiel #2
0
        public async Task <FileResult> PayImage(string paymethod)
        {
            string fileName      = string.Empty;
            var    configSection = _configuration.GetSection("SiteSettings:Payment");

            if ("alipay".Equals(paymethod, StringComparison.InvariantCultureIgnoreCase))
            {
                string alipayBRCode = configSection.GetValue <string> ("alipayBRCode");
                fileName = alipayBRCode;
                logger.LogDebug($"alipayBRCode configured as: ${fileName}");
            }

            if ("wechatpay".Equals(paymethod, StringComparison.InvariantCultureIgnoreCase))
            {
                string wechatBRCode = configSection.GetValue <string> ("wechatBRCode");
                fileName = wechatBRCode;
                logger.LogDebug($"wechatBRCode configured as: ${fileName}");
            }

            string mimeType = "application/image";

            new FileExtensionContentTypeProvider().TryGetContentType(fileName, out mimeType);
            FileResult result = new VirtualFileResult(fileName, mimeType);

            return(await Task.FromResult(result));
        }
Beispiel #3
0
        public void WithLastModified_GivenExpected_ShouldPass()
        {
            ActionResult result = new VirtualFileResult(string.Empty, TestContentType)
            {
                LastModified = TestLastModified
            };

            result.Should().BeVirtualFileResult().WithLastModified(TestLastModified);
        }
Beispiel #4
0
        public void WithEntityTag_GivenExpected_ShouldPass()
        {
            ActionResult result = new VirtualFileResult(string.Empty, TestContentType)
            {
                EntityTag = TestEntityTag
            };

            result.Should().BeVirtualFileResult().WithEntityTag(TestEntityTag);
        }
Beispiel #5
0
        public void WithFileDownloadName_GivenExpected_ShouldPass()
        {
            ActionResult result = new VirtualFileResult(string.Empty, TestContentType)
            {
                FileDownloadName = TestFileDownloadName
            };

            result.Should().BeVirtualFileResult().WithFileDownloadName(TestFileDownloadName);
        }
        private IFileProvider GetFileProvider(VirtualFileResult result)
        {
            if (result.FileProvider != null)
            {
                return(result.FileProvider);
            }

            result.FileProvider = _hostingEnvironment.WebRootFileProvider;
            return(result.FileProvider);
        }
Beispiel #7
0
    public void Constructor_SetsFileName()
    {
        // Arrange
        var path = Path.GetFullPath("helllo.txt");

        // Act
        var result = new VirtualFileResult(path, "text/plain");

        // Assert
        Assert.Equal(path, result.FileName);
    }
        public IActionResult DownloadFileWithFileName_WithEtag()
        {
            var file = new VirtualFileResult("/Greetings.txt", "text/plain")
            {
                FileProvider     = new EmbeddedFileProvider(GetType().GetTypeInfo().Assembly, "FilesWebSite.EmbeddedResources"),
                FileDownloadName = "downloadName.txt"
            };

            file.EntityTag = new Microsoft.Net.Http.Headers.EntityTagHeaderValue("\"Etag\"");
            return(file);
        }
        private IFileProvider GetFileProvider(VirtualFileResult result)
        {
            if (result.FileProvider != null)
            {
                return result.FileProvider;
            }

            result.FileProvider = _hostingEnvironment.WebRootFileProvider;

            return result.FileProvider;
        }
Beispiel #10
0
        public void WithLastModified_GivenNull_ShouldPass()
        {
            var          actualLastModified   = null as DateTimeOffset?;
            var          expectedLastModified = null as DateTimeOffset?;
            ActionResult result = new VirtualFileResult(string.Empty, TestContentType)
            {
                LastModified = actualLastModified
            };

            result.Should().BeVirtualFileResult().WithLastModified(expectedLastModified);
        }
Beispiel #11
0
    protected override Task ExecuteAsync(HttpContext httpContext, string path, string contentType, DateTimeOffset?lastModified = null, EntityTagHeaderValue entityTag = null, bool enableRangeProcessing = false)
    {
        var result = new VirtualFileResult(path, contentType)
        {
            LastModified          = lastModified,
            EntityTag             = entityTag,
            EnableRangeProcessing = enableRangeProcessing,
        };

        return(result.ExecuteAsync(httpContext));
    }
        public IActionResult Index()
        {
            string host = HttpContext.Request.Host.Host;

            VirtualFileResult response = !string.IsNullOrWhiteSpace(host) && host.TrimEnd('/').EndsWith(".onion", StringComparison.OrdinalIgnoreCase)
                                ? File("onion-index.html", "text/html")
                                : File("index.html", "text/html");

            response.LastModified = DateTimeOffset.UtcNow;
            return(response);
        }
Beispiel #13
0
        public void WithContentType_GivenUnexpected_ShouldFail()
        {
            var          actualContentType   = TestContentType;
            var          expectedContentType = "xyz";
            ActionResult result         = new VirtualFileResult(string.Empty, actualContentType);
            var          failureMessage = FailureMessageHelper.ExpectedContextToBeXButY("VirtualFileResult.ContentType", expectedContentType, actualContentType);

            Action a = () => result.Should().BeVirtualFileResult().WithContentType(expectedContentType, Reason, ReasonArgs);

            a.Should().Throw <Exception>().WithMessage(failureMessage);
        }
Beispiel #14
0
        public void WithVirtualPath_GivenUnexpected_ShouldFail()
        {
            var          actualFileName   = TestFileName;
            var          expectedFileName = "xyz";
            ActionResult result           = new VirtualFileResult(actualFileName, TestContentType);
            var          failureMessage   = FailureMessageHelper.ExpectedContextToBeXButY("VirtualFileResult.VirtualPath", expectedFileName, actualFileName);

            Action a = () => result.Should().BeVirtualFileResult().WithVirtualPath(expectedFileName, Reason, ReasonArgs);

            a.Should().Throw <Exception>().WithMessage(failureMessage);
        }
Beispiel #15
0
        public void WithEntityTag_GivenUnexpected_ShouldFail()
        {
            var          actualEntityTag   = TestEntityTag;
            var          expectedEntityTag = new EntityTagHeaderValue("\"1234\"");
            ActionResult result            = new VirtualFileResult(string.Empty, TestContentType)
            {
                EntityTag = actualEntityTag
            };
            var failureMessage = FailureMessageHelper.ExpectedContextToBeXButY("VirtualFileResult.EntityTag", expectedEntityTag, actualEntityTag);

            Action a = () => result.Should().BeVirtualFileResult().WithEntityTag(expectedEntityTag, Reason, ReasonArgs);

            a.Should().Throw <Exception>().WithMessage(failureMessage);
        }
Beispiel #16
0
    public void Constructor_SetsContentTypeAndParameters()
    {
        // Arrange
        var path              = Path.GetFullPath("helllo.txt");
        var contentType       = "text/plain; charset=us-ascii; p1=p1-value";
        var expectedMediaType = contentType;

        // Act
        var result = new VirtualFileResult(path, contentType);

        // Assert
        Assert.Equal(path, result.FileName);
        MediaTypeAssert.Equal(expectedMediaType, result.ContentType);
    }
Beispiel #17
0
    public void GetFileProvider_ReturnsFileProviderFromWebHostEnvironment()
    {
        // Arrange
        var webHostFileProvider = Mock.Of <IFileProvider>();
        var webHostEnvironment  = Mock.Of <IWebHostEnvironment>(e => e.WebRootFileProvider == webHostFileProvider);

        var result = new VirtualFileResult("some-path", "text/plain");

        // Act
        var fileProvider = VirtualFileResultExecutor.GetFileProvider(result, webHostEnvironment);

        // Assert
        Assert.Same(webHostFileProvider, fileProvider);
    }
Beispiel #18
0
        public void WithLastModified_GivenUnexpected_ShouldFail()
        {
            var          actualLastModified   = TestLastModified;
            var          expectedLastModified = TestLastModified.Value.AddMilliseconds(1);
            ActionResult result = new VirtualFileResult(string.Empty, TestContentType)
            {
                LastModified = actualLastModified
            };
            var failureMessage = FailureMessageHelper.ExpectedContextToBeXButY("VirtualFileResult.LastModified", expectedLastModified, actualLastModified);

            Action a = () => result.Should().BeVirtualFileResult().WithLastModified(expectedLastModified, Reason, ReasonArgs);

            a.Should().Throw <Exception>().WithMessage(failureMessage);
        }
        private IFileInfo GetFileInformation(VirtualFileResult result)
        {
            var fileProvider = GetFileProvider(result);

            var normalizedPath = result.FileName;

            if (normalizedPath.StartsWith("~", StringComparison.Ordinal))
            {
                normalizedPath = normalizedPath.Substring(1);
            }

            var fileInfo = fileProvider.GetFileInfo(normalizedPath);

            return(fileInfo);
        }
Beispiel #20
0
    protected override Task ExecuteAsync(HttpContext httpContext, string path, string contentType, DateTimeOffset?lastModified = null, EntityTagHeaderValue entityTag = null, bool enableRangeProcessing = false)
    {
        var webHostEnvironment = httpContext.RequestServices.GetRequiredService <IWebHostEnvironment>();

        httpContext.RequestServices = new ServiceCollection()
                                      .AddSingleton(webHostEnvironment)
                                      .AddTransient <IActionResultExecutor <VirtualFileResult>, VirtualFileResultExecutor>()
                                      .AddTransient <ILoggerFactory, NullLoggerFactory>()
                                      .BuildServiceProvider();

        var actionContext = new ActionContext(httpContext, new(), new());
        var result        = new VirtualFileResult(path, contentType)
        {
            LastModified          = lastModified,
            EntityTag             = entityTag,
            EnableRangeProcessing = enableRangeProcessing,
        };

        return(result.ExecuteResultAsync(actionContext));
    }
        protected virtual Task WriteFileAsync(ActionContext context, VirtualFileResult result, IFileInfo fileInfo, RangeItemHeaderValue range, long rangeLength)
        {
            if (context == null)
            {
                throw new ArgumentNullException(nameof(context));
            }

            if (result == null)
            {
                throw new ArgumentNullException(nameof(result));
            }

            if (range != null && rangeLength == 0)
            {
                return(Task.CompletedTask);
            }

            var response     = context.HttpContext.Response;
            var physicalPath = fileInfo.PhysicalPath;
            var sendFile     = response.HttpContext.Features.Get <IHttpSendFileFeature>();

            if (sendFile != null && !string.IsNullOrEmpty(physicalPath))
            {
                if (range != null)
                {
                    return(sendFile.SendFileAsync(
                               physicalPath,
                               offset: range.From ?? 0L,
                               count: rangeLength,
                               cancellation: default(CancellationToken)));
                }

                return(sendFile.SendFileAsync(
                           physicalPath,
                           offset: 0,
                           count: null,
                           cancellation: default(CancellationToken)));
            }

            return(WriteFileAsync(context.HttpContext, GetFileStream(fileInfo), range, rangeLength));
        }
Beispiel #22
0
        private async Task WriteFileAsync(ActionContext context, VirtualFileResult result)
        {
            var response     = context.HttpContext.Response;
            var fileProvider = GetFileProvider(result);

            var normalizedPath = result.FileName;

            if (normalizedPath.StartsWith("~", StringComparison.Ordinal))
            {
                normalizedPath = normalizedPath.Substring(1);
            }

            var fileInfo = fileProvider.GetFileInfo(normalizedPath);

            if (fileInfo.Exists)
            {
                var physicalPath = fileInfo.PhysicalPath;
                var sendFile     = response.HttpContext.Features.Get <IHttpSendFileFeature>();
                if (sendFile != null && !string.IsNullOrEmpty(physicalPath))
                {
                    await sendFile.SendFileAsync(
                        physicalPath,
                        offset : 0,
                        count : null,
                        cancellation : default(CancellationToken));
                }
                else
                {
                    var fileStream = GetFileStream(fileInfo);
                    using (fileStream)
                    {
                        await fileStream.CopyToAsync(response.Body, DefaultBufferSize);
                    }
                }
            }
            else
            {
                throw new FileNotFoundException(
                          Resources.FormatFileResult_InvalidPath(result.FileName), result.FileName);
            }
        }
        private async Task WriteFileAsync(ActionContext context, VirtualFileResult result)
        {
            var response = context.HttpContext.Response;
            var fileProvider = GetFileProvider(result);

            var normalizedPath = result.FileName;
            if (normalizedPath.StartsWith("~", StringComparison.Ordinal))
            {
                normalizedPath = normalizedPath.Substring(1);
            }

            var fileInfo = fileProvider.GetFileInfo(normalizedPath);
            if (fileInfo.Exists)
            {
                var physicalPath = fileInfo.PhysicalPath;
                var sendFile = response.HttpContext.Features.Get<IHttpSendFileFeature>();
                if (sendFile != null && !string.IsNullOrEmpty(physicalPath))
                {
                    await sendFile.SendFileAsync(
                        physicalPath,
                        offset: 0,
                        count: null,
                        cancellation: default(CancellationToken));
                }
                else
                {
                    var fileStream = GetFileStream(fileInfo);
                    using (fileStream)
                    {
                        await fileStream.CopyToAsync(response.Body, DefaultBufferSize);
                    }
                }
            }
            else
            {
                throw new FileNotFoundException(
                    Resources.FormatFileResult_InvalidPath(result.FileName), result.FileName);
            }
        }
        public virtual Task ExecuteAsync(ActionContext context, VirtualFileResult result)
        {
            if (context == null)
            {
                throw new ArgumentNullException(nameof(context));
            }

            if (result == null)
            {
                throw new ArgumentNullException(nameof(result));
            }

            var fileInfo = GetFileInformation(result);

            if (!fileInfo.Exists)
            {
                throw new FileNotFoundException(
                          Resources.FormatFileResult_InvalidPath(result.FileName), result.FileName);
            }

            var lastModified = result.LastModified ?? fileInfo.LastModified;

            var(range, rangeLength, serveBody) = SetHeadersAndLog(
                context,
                result,
                fileInfo.Length,
                lastModified,
                result.EntityTag);

            if (serveBody)
            {
                return(WriteFileAsync(context, result, fileInfo, range, rangeLength));
            }

            return(Task.CompletedTask);
        }
Beispiel #25
0
 public Task ExecuteAsync(ActionContext context, VirtualFileResult result)
 {
     SetHeadersAndLog(context, result);
     return(WriteFileAsync(context, result));
 }
Beispiel #26
0
        public void WithContentType_GivenExpected_ShouldPass()
        {
            ActionResult result = new VirtualFileResult(string.Empty, TestContentType);

            result.Should().BeVirtualFileResult().WithContentType(TestContentType);
        }
Beispiel #27
0
        public void WithVirtualPath_GivenExpected_ShouldPass()
        {
            ActionResult result = new VirtualFileResult(TestFileName, TestContentType);

            result.Should().BeVirtualFileResult().WithVirtualPath(TestFileName);
        }
 public Task ExecuteAsync(ActionContext context, VirtualFileResult result)
 {
     SetHeadersAndLog(context, result);
     return WriteFileAsync(context, result);
 }