/// <summary> /// Writes the file at the specified <paramref name="path"/> to the response. /// <para> /// This supports range requests (<see cref="StatusCodes.Status206PartialContent"/> or /// <see cref="StatusCodes.Status416RangeNotSatisfiable"/> if the range is not satisfiable). /// </para> /// </summary> /// <param name="path">The path to the file. When not rooted, resolves the path relative to <see cref="IWebHostEnvironment.WebRootFileProvider"/>.</param> /// <param name="contentType">The Content-Type of the file.</param> /// <param name="fileDownloadName">The suggested file name.</param> /// <param name="lastModified">The <see cref="DateTimeOffset"/> of when the file was last modified.</param> /// <param name="entityTag">The <see cref="EntityTagHeaderValue"/> associated with the file.</param> /// <param name="enableRangeProcessing">Set to <c>true</c> to enable range requests processing.</param> /// <returns>The created <see cref="IResult"/> for the response.</returns> #pragma warning disable RS0026 // Do not add multiple public overloads with optional parameters public static IResult File( #pragma warning restore RS0026 // Do not add multiple public overloads with optional parameters string path, string?contentType = null, string?fileDownloadName = null, DateTimeOffset?lastModified = null, EntityTagHeaderValue?entityTag = null, bool enableRangeProcessing = false) => Path.IsPathRooted(path) ? TypedResults.PhysicalFile(path, contentType, fileDownloadName, lastModified, entityTag, enableRangeProcessing) : TypedResults.VirtualFile(path, contentType, fileDownloadName, lastModified, entityTag, enableRangeProcessing);
public void VirtualFile_ResultHasCorrectValues(string contentType, string fileDownloadName, bool enableRangeProcessing, DateTimeOffset lastModified, EntityTagHeaderValue entityTag) { // Arrange var path = "path"; // Act var result = TypedResults.VirtualFile(path, contentType, fileDownloadName, lastModified, entityTag, enableRangeProcessing); // Assert Assert.Equal(path, result.FileName); Assert.Equal(contentType ?? "application/octet-stream", result.ContentType); Assert.Equal(fileDownloadName, result.FileDownloadName); Assert.Equal(enableRangeProcessing, result.EnableRangeProcessing); Assert.Equal(lastModified, result.LastModified); Assert.Equal(entityTag, result.EntityTag); }
public void VirtualFile_WithEmptyPath_ThrowsArgException() { Assert.Throws <ArgumentException>("path", () => TypedResults.VirtualFile(string.Empty)); }
public void VirtualFile_WithNullPath_ThrowsArgException() { Assert.Throws <ArgumentException>("path", () => TypedResults.VirtualFile(default(string))); }