| File: ExceptionHandler\ExceptionHandlerOptions.cs | Web Access |
| Project: src\aspnetcore\src\Middleware\Diagnostics\src\Microsoft.AspNetCore.Diagnostics.csproj (Microsoft.AspNetCore.Diagnostics) |
// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. using System.Diagnostics.Tracing; using Microsoft.AspNetCore.Diagnostics; using Microsoft.AspNetCore.Http; using Microsoft.Extensions.Logging; namespace Microsoft.AspNetCore.Builder; /// <summary> /// Options for configuring the <see cref="ExceptionHandlerMiddleware"/>. /// </summary> public class ExceptionHandlerOptions { /// <summary> /// The path to the exception handling endpoint. This path will be used when executing /// the <see cref="ExceptionHandler"/>. /// </summary> public PathString ExceptionHandlingPath { get; set; } /// <summary> /// Gets or sets whether the handler needs to create a separate <see cref="IServiceProvider"/> scope and /// replace it on <see cref="HttpContext.RequestServices"/> when re-executing the request to handle an error. /// </summary> /// <remarks>The default value is <see langword="false"/>.</remarks> public bool CreateScopeForErrors { get; set; } /// <summary> /// The <see cref="RequestDelegate" /> that will handle the exception. If this is not /// explicitly provided, the subsequent middleware pipeline will be used by default. /// </summary> public RequestDelegate? ExceptionHandler { get; set; } /// <summary> /// This value controls whether the <see cref="ExceptionHandlerMiddleware" /> should /// consider a response with a 404 status code to be a valid result of executing the /// <see cref="ExceptionHandler"/>. The default value is false and the middleware will /// consider 404 status codes to be an error on the server and will therefore rethrow /// the original exception. /// </summary> public bool AllowStatusCode404Response { get; set; } /// <summary> /// Gets or sets a delegate used to map an exception to an HTTP status code. /// </summary> /// <remarks> /// If <see cref="StatusCodeSelector"/> is <c>null</c>, the default exception status code 500 is used. /// </remarks> public Func<Exception, int>? StatusCodeSelector { get; set; } /// <summary> /// Gets or sets a callback that can return <see langword="true" /> to suppress diagnostics in <see cref="ExceptionHandlerMiddleware" />. /// <para> /// If <see cref="SuppressDiagnosticsCallback"/> is <c>null</c>, the default behavior is to suppress diagnostics if the exception was handled by /// an <see cref="IExceptionHandler"/> service instance registered in the DI container. /// To always record diagnostics for handled exceptions, set a callback that returns <see langword="false" />. /// </para> /// <para> /// This callback is only run if the exception was handled by the middleware. /// Unhandled exceptions and exceptions thrown after the response has started are always logged. /// </para> /// <para> /// Suppressed diagnostics include: /// </para> /// <list type="bullet"> /// <item> /// <description>Logging <c>UnhandledException</c> to <see cref="ILogger"/>.</description> /// </item> /// <item> /// <description>Writing the <c>Microsoft.AspNetCore.Diagnostics.HandledException</c> event to <see cref="EventSource" />.</description> /// </item> /// <item> /// <description>Adding the <c>error.type</c> tag to the <c>http.server.request.duration</c> metric.</description> /// </item> /// </list> /// </summary> public Func<ExceptionHandlerSuppressDiagnosticsContext, bool>? SuppressDiagnosticsCallback { get; set; } }