| File: ApiBehaviorOptions.cs | Web Access |
| Project: src\aspnetcore\src\Mvc\Mvc.Core\src\Microsoft.AspNetCore.Mvc.Core.csproj (Microsoft.AspNetCore.Mvc.Core) |
// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. using System.Collections; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc.Infrastructure; using Microsoft.AspNetCore.Mvc.ModelBinding; using Microsoft.Extensions.DependencyInjection; namespace Microsoft.AspNetCore.Mvc; /// <summary> /// Options used to configure behavior for types annotated with <see cref="ApiControllerAttribute"/>. /// </summary> public class ApiBehaviorOptions : IEnumerable<ICompatibilitySwitch> { private readonly IReadOnlyList<ICompatibilitySwitch> _switches = Array.Empty<ICompatibilitySwitch>(); private Func<ActionContext, IActionResult> _invalidModelStateResponseFactory = default!; /// <summary> /// Delegate invoked on actions annotated with <see cref="ApiControllerAttribute"/> to convert invalid /// <see cref="ModelStateDictionary"/> into an <see cref="IActionResult"/> /// </summary> public Func<ActionContext, IActionResult> InvalidModelStateResponseFactory { get => _invalidModelStateResponseFactory; set => _invalidModelStateResponseFactory = value ?? throw new ArgumentNullException(nameof(value)); } /// <summary> /// Gets or sets a value that determines if the filter that returns an <see cref="BadRequestObjectResult"/> when /// <see cref="ActionContext.ModelState"/> is invalid is suppressed. <seealso cref="InvalidModelStateResponseFactory"/>. /// </summary> public bool SuppressModelStateInvalidFilter { get; set; } /// <summary> /// Gets or sets a value that determines if model binding sources are inferred for action parameters on controllers annotated /// with <see cref="ApiControllerAttribute"/> is suppressed. /// <para> /// When enabled, the following sources are inferred: /// Parameters that appear as route values, are assumed to be bound from the path (<see cref="BindingSource.Path"/>). /// Parameters of type <see cref="IFormFile"/> and <see cref="IFormFileCollection"/> are assumed to be bound from form. /// Parameters that are complex (<see cref="ModelMetadata.IsComplexType"/>) and are registered in the DI Container (<see cref="IServiceCollection"/>) are assumed to be bound from the services <see cref="BindingSource.Services"/>, unless this /// option is explicitly disabled <see cref="DisableImplicitFromServicesParameters"/>. /// Parameters that are complex (<see cref="ModelMetadata.IsComplexType"/>) are assumed to be bound from the body (<see cref="BindingSource.Body"/>). /// All other parameters are assumed to be bound from the query. /// </para> /// </summary> public bool SuppressInferBindingSourcesForParameters { get; set; } /// <summary> /// Gets or sets a value that determines if parameters are inferred to be from services. /// This property is only applicable when <see cref="SuppressInferBindingSourcesForParameters" /> is <see langword="false" />. /// </summary> public bool DisableImplicitFromServicesParameters { get; set; } /// <summary> /// Gets or sets a value that determines if an <c>multipart/form-data</c> consumes action constraint is added to parameters /// that are bound from form data. /// </summary> public bool SuppressConsumesConstraintForFormFileParameters { get; set; } /// <summary> /// Gets or sets a value that determines if controllers with <see cref="ApiControllerAttribute"/> /// transform certain client errors. /// <para> /// When <see langword="false"/>, a result filter is added to API controller actions that transforms /// <see cref="IClientErrorActionResult"/>. Otherwise, the filter is suppressed. /// </para> /// <para> /// By default, <see cref="ClientErrorMapping"/> is used to map <see cref="IClientErrorActionResult"/> to a /// <see cref="ProblemDetails"/> instance (returned as the value for <see cref="ObjectResult"/>). /// </para> /// <para> /// To customize the output of the filter (for e.g. to return a different error type), register a custom /// implementation of <see cref="IClientErrorFactory"/> in the service collection. /// </para> /// </summary> /// <value> /// The default value is <see langword="false"/>. /// </value> public bool SuppressMapClientErrors { get; set; } /// <summary> /// Gets a map of HTTP status codes to <see cref="ClientErrorData"/>. Configured values /// are used to transform <see cref="IClientErrorActionResult"/> to an <see cref="ObjectResult"/> /// instance where the <see cref="ObjectResult.Value"/> is <see cref="ProblemDetails"/>. /// <para> /// Use of this feature can be disabled by resetting <see cref="SuppressMapClientErrors"/>. /// </para> /// </summary> public IDictionary<int, ClientErrorData> ClientErrorMapping { get; } = new Dictionary<int, ClientErrorData>(); IEnumerator<ICompatibilitySwitch> IEnumerable<ICompatibilitySwitch>.GetEnumerator() => _switches.GetEnumerator(); IEnumerator IEnumerable.GetEnumerator() => _switches.GetEnumerator(); }