using Elsa.Http.Models; using Microsoft.AspNetCore.Http; using System.Net.Mime; using Elsa.Http.Contracts; using Elsa.Workflows.Core.Contracts; namespace Elsa.Http.Handlers; // ReSharper disable once ClassWithVirtualMembersNeverInherited.Global /// /// A default fault handler that writes information about the fault to the . /// public class DefaultHttpEndpointWorkflowFaultHandler : IHttpEndpointWorkflowFaultHandler { private readonly IApiSerializer _apiSerializer; /// /// Initializes a new instance of the class. /// public DefaultHttpEndpointWorkflowFaultHandler(IApiSerializer apiSerializer) { _apiSerializer = apiSerializer; } /// public virtual async ValueTask HandleAsync(HttpEndpointFaultedWorkflowContext context) { var httpContext = context.HttpContext; var workflowState = context.WorkflowState; httpContext.Response.ContentType = MediaTypeNames.Application.Json; httpContext.Response.StatusCode = StatusCodes.Status500InternalServerError; var faultedResponse = _apiSerializer.Serialize(workflowState); await httpContext.Response.WriteAsync(faultedResponse, context.CancellationToken); } }