Added HttpException class for missing HttpException for net8 Wrapped HttpContext.Session, GetJsonResult, IsAjaxRequest and GetUserIdentityName in controllers for net8 Added AuthenticationService to test Fab2ApprovalMKLink code for net8 Compile conditionally flags to debug in dotnet core
74 lines
2.6 KiB
C#
74 lines
2.6 KiB
C#
#if NET8
|
|
|
|
using System;
|
|
using System.IO;
|
|
using System.Threading.Tasks;
|
|
|
|
using Fab2ApprovalSystem.PdfGenerator;
|
|
|
|
using Microsoft.AspNetCore.Mvc;
|
|
using Microsoft.AspNetCore.Mvc.Rendering;
|
|
using Microsoft.AspNetCore.Mvc.ViewEngines;
|
|
using Microsoft.AspNetCore.Mvc.ViewFeatures;
|
|
using Microsoft.Extensions.DependencyInjection;
|
|
|
|
namespace Fab2ApprovalSystem.Extensions;
|
|
|
|
public static class ControllerExtensions {
|
|
|
|
public static ActionResult GetBinaryContentResult<TModel>(this Controller controller, string viewName, string contentType, TModel model) {
|
|
string pageTitle = string.Empty;
|
|
|
|
string htmlText = RenderViewToString(controller, viewName, model);
|
|
|
|
StandardPdfRenderer standardPdfRenderer = new();
|
|
// Let the html be rendered into a PDF document through iTextSharp.
|
|
byte[] buffer = standardPdfRenderer.Render(htmlText, pageTitle);
|
|
|
|
// Return the PDF as a binary stream to the client.
|
|
return new BinaryContentResult(buffer, contentType);
|
|
}
|
|
|
|
public static string RenderViewToString<TModel>(this Controller controller, string viewName, TModel model) {
|
|
if (string.IsNullOrEmpty(viewName))
|
|
viewName = controller.ControllerContext.ActionDescriptor.ActionName;
|
|
|
|
controller.ViewData.Model = model;
|
|
|
|
using (StringWriter writer = new()) {
|
|
try {
|
|
CompositeViewEngine compositeViewEngine = controller.HttpContext.RequestServices.GetRequiredService(typeof(ICompositeViewEngine)) as CompositeViewEngine;
|
|
if (compositeViewEngine is null || compositeViewEngine.ViewEngines.Count == 0) { }
|
|
|
|
ViewEngineResult viewResult = null;
|
|
|
|
if (viewName.EndsWith(".cshtml"))
|
|
viewResult = compositeViewEngine.GetView(viewName, viewName, false);
|
|
else
|
|
viewResult = compositeViewEngine.FindView(controller.ControllerContext, viewName, false);
|
|
|
|
if (!viewResult.Success)
|
|
return $"A view with the name '{viewName}' could not be found";
|
|
|
|
ViewContext viewContext = new(
|
|
controller.ControllerContext,
|
|
viewResult.View,
|
|
controller.ViewData,
|
|
controller.TempData,
|
|
writer,
|
|
new HtmlHelperOptions()
|
|
);
|
|
|
|
Task task = viewResult.View.RenderAsync(viewContext);
|
|
task.Wait();
|
|
|
|
return writer.GetStringBuilder().ToString();
|
|
} catch (Exception ex) {
|
|
return $"Failed - {ex.Message}";
|
|
}
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
#endif |