public static void Main()
builder.Services.AddTransient<IFaultBuilder, FaultBuilder>(serviceProvider =>
return (FaultBuilder)new FaultBuilder()
.WithServerName("Jarvis")
.WithInternalId(Guid.NewGuid().ToString())
.WithCategory(FaultCategory.Unspecified)
.WithSeverity(FaultSeverity.Medium)
.WithDocumentationLink("none");
var response = new HttpResponseResult(_faultBuilder
.WithTitle("Invalid status code.")
.WithStatus(FaultStatus.InternalServerError)
.WithDetail($"Invalid status code: {response.StatusCode} from integration component.")
.WithTarget(nameof(MakeIntegrationComponent))
.WithCategory(FaultCategory.ExternalService)
.WithExternalServiceHttpStatus(response.StatusCode)
return new HttpResponseResult(_faultBuilder
.WithTitle("Exception occured")
.WithStatus(FaultStatus.InternalServerError)
.WithStackTrace(ex.StackTrace)
.WithSeverity(FaultSeverity.High)
.WithTarget(nameof(MakeIntegrationComponent))
.WithCategory(FaultCategory.ExternalService)
string StackTrace { get; }
string ServerName { get; }
string InternalId { get; }
string DocumentationLink { get; }
FaultSeverity Severity { get; }
FaultCategory Category { get; }
DateTime Created { get; }
HttpStatusCode? ExternalServiceHttpStatus { get; }
IList<string> Errors { get; }
InternalServerError = 500,
public enum FaultSeverity
public enum FaultCategory
public record Fault : IFault
public string Title { get; }
public string Detail { get; }
public string Status { get; }
public int StatusCode { get; }
public string Type { get; }
public string Source { get; }
public string StackTrace { get; }
public string ServerName { get; }
public string InternalId { get; }
public string DocumentationLink { get; }
public string Target { get; }
public FaultSeverity Severity { get; }
public FaultCategory Category { get; }
public DateTime Created { get; } = DateTime.UtcNow;
public HttpStatusCode? ExternalServiceHttpStatus { get; }
public IList<string> Errors { get; }
string stackTrace = null,
string serverName = null,
string internalId = null,
string documentationLink = null,
HttpStatusCode? externalServiceHttpStatus = null,
FaultSeverity severity = FaultSeverity.Medium,
FaultCategory category = FaultCategory.Unspecified,
IList<string> errors = null)
Status = faultStatus.ToString();
StatusCode = (int)faultStatus;
DocumentationLink = documentationLink;
ExternalServiceHttpStatus = externalServiceHttpStatus;
Errors = errors ?? new List<string>();
public interface IFaultBuilder
IFaultBuilder WithStatus(FaultStatus status);
IFaultBuilder WithTitle(string title);
IFaultBuilder WithType(string type);
IFaultBuilder WithDetail(string detail);
IFaultBuilder WithSource(string source);
IFaultBuilder WithStackTrace(string stackTrace);
IFaultBuilder WithServerName(string serverName);
IFaultBuilder WithInternalId(string internalId);
IFaultBuilder WithDocumentationLink(string documentationLink);
IFaultBuilder WithSeverity(FaultSeverity fault);
IFaultBuilder WithCategory(FaultCategory faultCategory);
IFaultBuilder WithTarget(string target);
IFaultBuilder WithExternalServiceHttpStatus(HttpStatusCode externalServiceHttpStatus);
IFaultBuilder WithErrors(IList<string> errors);
public class FaultBuilder : IFaultBuilder
private FaultStatus _status = FaultStatus.InternalServerError;
private string _stackTrace;
private string _serverName;
private string _internalId;
private string _documentationLink;
private FaultSeverity _severity = FaultSeverity.Medium;
private FaultCategory _category = FaultCategory.Unspecified;
private HttpStatusCode? _externalServiceHttpStatus;
private IList<string> _errors = new List<string>();
public IFaultBuilder WithStatus(FaultStatus status)
public IFaultBuilder WithTitle(string title)
public IFaultBuilder WithType(string type)
public IFaultBuilder WithDetail(string detail)
public IFaultBuilder WithSource(string source)
public IFaultBuilder WithStackTrace(string stackTrace)
_stackTrace = stackTrace;
public IFaultBuilder WithServerName(string serverName)
_serverName = serverName;
public IFaultBuilder WithInternalId(string internalId)
_internalId = internalId;
public IFaultBuilder WithDocumentationLink(string documentationLink)
_documentationLink = documentationLink;
public IFaultBuilder WithSeverity(FaultSeverity serverity)
public IFaultBuilder WithCategory(FaultCategory category)
public IFaultBuilder WithTarget(string target)
public IFaultBuilder WithErrors(IList<string> errors)
public IFaultBuilder WithExternalServiceHttpStatus(HttpStatusCode externalServiceHttpStatus)
_externalServiceHttpStatus = externalServiceHttpStatus;
_externalServiceHttpStatus,