| File: RequestDelegateFactoryOptions.cs | Web Access |
| Project: src\aspnetcore\src\Http\Http.Extensions\src\Microsoft.AspNetCore.Http.Extensions.csproj (Microsoft.AspNetCore.Http.Extensions) |
// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Http.Metadata; using Microsoft.Extensions.Logging; namespace Microsoft.AspNetCore.Http; /// <summary> /// Options for controlling the behavior of the <see cref="RequestDelegate" /> when created using <see cref="RequestDelegateFactory" />. /// </summary> public sealed class RequestDelegateFactoryOptions { /// <summary> /// The <see cref="IServiceProvider"/> instance used to access application services. /// </summary> public IServiceProvider? ServiceProvider { get; init; } /// <summary> /// The list of route parameter names that are specified for this handler. /// </summary> public IEnumerable<string>? RouteParameterNames { get; init; } /// <summary> /// Controls whether the <see cref="RequestDelegate"/> should throw a <see cref="BadHttpRequestException"/> in addition to /// writing a <see cref="LogLevel.Debug"/> log when handling invalid requests. /// </summary> public bool ThrowOnBadRequest { get; init; } /// <summary> /// Prevent the <see cref="RequestDelegateFactory" /> from inferring a parameter should be bound from the request body without an attribute that implements <see cref="IFromBodyMetadata"/>. /// </summary> public bool DisableInferBodyFromParameters { get; init; } /// <summary> /// The mutable <see cref="Builder.EndpointBuilder"/> used to assist in the creation of the <see cref="RequestDelegateResult.RequestDelegate"/>. /// This is primarily used to run <see cref="EndpointBuilder.FilterFactories"/> and populate inferred <see cref="EndpointBuilder.Metadata"/>. /// The <see cref="EndpointBuilder.RequestDelegate"/> must be <see langword="null"/>. After the call to <see cref="RequestDelegateFactory.Create(Delegate, RequestDelegateFactoryOptions?)"/>, /// <see cref="EndpointBuilder.RequestDelegate"/> will be the same as <see cref="RequestDelegateResult.RequestDelegate"/>. /// </summary> /// <remarks> /// Any metadata already in <see cref="EndpointBuilder.Metadata"/> will be included in <see cref="RequestDelegateResult.EndpointMetadata" /> <b>before</b> /// most metadata inferred during creation of the <see cref="RequestDelegateResult.RequestDelegate"/> and <b>before</b> any metadata provided by types in /// the delegate signature that implement <see cref="IEndpointMetadataProvider" /> or <see cref="IEndpointParameterMetadataProvider" />. The exception to this general rule is the /// <see cref="IAcceptsMetadata"/> that <see cref="RequestDelegateFactory.Create(Delegate, RequestDelegateFactoryOptions?)"/> infers automatically /// without any custom metadata providers which instead is inserted at the start to give it lower precedence. Custom metadata providers can choose to /// insert their metadata at the start to give lower precedence, but this is unusual. /// </remarks> public EndpointBuilder? EndpointBuilder { get; init; } }