IResult.cs 2.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. #if !NET6_0_OR_GREATER
  2. using Microsoft.AspNetCore.Http;
  3. using Microsoft.AspNetCore.Mvc;
  4. using Microsoft.AspNetCore.Mvc.Abstractions;
  5. using Microsoft.AspNetCore.Routing;
  6. using System;
  7. using System.Net;
  8. using System.Threading.Tasks;
  9. namespace FastReport.Web.Infrastructure
  10. {
  11. internal interface IResult
  12. {
  13. Task ExecuteAsync(HttpContext httpContext);
  14. }
  15. internal sealed class ResultHandler : IResult
  16. {
  17. private readonly IActionResult _actionResult;
  18. public static IResult Parse(IActionResult actionResult)
  19. {
  20. return new ResultHandler(actionResult);
  21. }
  22. public Task ExecuteAsync(HttpContext httpContext)
  23. {
  24. var actionDescriptor = new ActionDescriptor();
  25. var context = new ActionContext(httpContext, new RouteData() /*httpContext.GetRouteData()*/, actionDescriptor);
  26. return _actionResult.ExecuteResultAsync(context);
  27. }
  28. private ResultHandler(IActionResult actionResult)
  29. {
  30. _actionResult = actionResult;
  31. }
  32. }
  33. internal static class Results
  34. {
  35. internal static IResult Content(string content, string contentType) => ResultHandler.Parse(new ContentResult()
  36. {
  37. Content = content,
  38. ContentType = contentType,
  39. StatusCode = StatusCodes.Status200OK
  40. });
  41. internal static IResult BadRequest(string content) => ResultHandler.Parse(new BadRequestObjectResult(content));
  42. internal static IResult File(
  43. byte[] fileContents,
  44. string contentType = null,
  45. string fileDownloadName = null,
  46. bool enableRangeProcessing = false,
  47. DateTimeOffset? lastModified = null)
  48. => ResultHandler.Parse(new FileContentResult(fileContents, contentType)
  49. {
  50. FileDownloadName = fileDownloadName,
  51. EnableRangeProcessing = enableRangeProcessing,
  52. LastModified = lastModified
  53. });
  54. internal static IResult NotFound() => ResultHandler.Parse(new NotFoundResult());
  55. internal static IResult Ok() => ResultHandler.Parse(new OkResult());
  56. internal static IResult Ok(object value)
  57. {
  58. IActionResult result;
  59. if (value == null)
  60. result = new OkResult();
  61. else
  62. result = new OkObjectResult(value);
  63. return ResultHandler.Parse(result);
  64. }
  65. internal static IResult StatusCode(int code) => ResultHandler.Parse(new StatusCodeResult(code));
  66. internal static IResult Unauthorized() => ResultHandler.Parse(new UnauthorizedResult());
  67. }
  68. }
  69. #endif