| File: DependencyInjection\DefaultRazorComponentsServiceOptionsConfiguration.cs | Web Access |
| Project: src\aspnetcore\src\Components\Endpoints\src\Microsoft.AspNetCore.Components.Endpoints.csproj (Microsoft.AspNetCore.Components.Endpoints) |
// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. using System.Text.Json; using Microsoft.AspNetCore.Components.Endpoints; using Microsoft.AspNetCore.Components.Endpoints.FormMapping; using Microsoft.AspNetCore.Hosting; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.Logging; using Microsoft.Extensions.Options; namespace Microsoft.Extensions.DependencyInjection; internal class DefaultRazorComponentsServiceOptionsConfiguration( IConfiguration configuration, ILoggerFactory loggerFactory, IWebHostEnvironment environment) : IPostConfigureOptions<RazorComponentsServiceOptions> { public IConfiguration Configuration { get; } = configuration; public void PostConfigure(string? name, RazorComponentsServiceOptions options) { var value = Configuration[WebHostDefaults.DetailedErrorsKey]; options.DetailedErrors = string.Equals(value, "true", StringComparison.OrdinalIgnoreCase) || string.Equals(value, "1", StringComparison.OrdinalIgnoreCase); options._formMappingOptions = new FormDataMapperOptions(loggerFactory) { MaxRecursionDepth = options.MaxFormMappingRecursionDepth, MaxErrorCount = options.MaxFormMappingErrorCount, MaxCollectionSize = options.MaxFormMappingCollectionSize, MaxKeyBufferSize = options.MaxFormMappingKeySize }; var file = environment.WebRootFileProvider.GetFileInfo($"{environment.ApplicationName}.modules.json"); if (file.Exists) { // We are going to emit the initializers as JSON, so avoid deserializing them, since we are going to // serialize them again later. using var reader = new StreamReader(file.CreateReadStream()); options.JavaScriptInitializers = reader.ReadToEnd(); if (options.JavaScriptInitializers == "") { options.JavaScriptInitializers = null; } else { // Do an extra check to see if the file just contains an empty json array, and if so, set the value to null, // as this avoids emitting any value later on in the response. try { if (options.JavaScriptInitializers != null) { var initializers = JsonSerializer.Deserialize<string[]>(options.JavaScriptInitializers); if (initializers == null || initializers.Length == 0) { options.JavaScriptInitializers = null; } } } catch (Exception) { // We should never get here because the SDK is responsible for generating the file we use, // and that should always produce well formed JSON, but in any case, we just ignore the error // and continue, letting the failure happen on the client. } } } } }