Skip to content

System.NotSupportedException when using Dictionary<string,string> with InteractiveRequestOptions AdditionalProperties #62156

Open
@baynezy

Description

@baynezy

Is there an existing issue for this?

  • I have searched the existing issues

Describe the bug

On adding a Dictionary<string, string> as a parameter as an AdditionalProperty on an InteractiveRequestOptions instance. If you pass that to NavigationManager.NavigateToLogin method. It will error.

Expected Behavior

The application will redirect to OIDC IdP with additional parameters passed in /authorize request.

Steps To Reproduce

var options = new InteractiveRequestOptions
{
    Interaction = InteractionType.SignIn,
    ReturnUrl = Navigation.BaseUri
};
var parameters = new Dictionary<string, string>
{
    { "ext-user-type", "PaidUser" }
};

options.TryAddAdditionalParameter("extraQueryParams", parameters);
NavigationManager.NavigateToLogin("authentication/login", options);

Exceptions (if any)

System.NotSupportedException: JsonTypeInfo metadata for type 'System.Collections.Generic.Dictionary`2[System.String,System.String]' was not provided by TypeInfoResolver of type 'Microsoft.AspNetCore.Components.WebAssembly.Authentication.InteractiveRequestOptionsSerializerContext'. If using source generation, ensure that all root types passed to the serializer have been annotated with 'JsonSerializableAttribute', along with any types that might be serialized polymorphically. The unsupported member type is located on type 'System.Object'. Path: $.
 ---> System.NotSupportedException: JsonTypeInfo metadata for type 'System.Collections.Generic.Dictionary`2[System.String,System.String]' was not provided by TypeInfoResolver of type 'Microsoft.AspNetCore.Components.WebAssembly.Authentication.InteractiveRequestOptionsSerializerContext'. If using source generation, ensure that all root types passed to the serializer have been annotated with 'JsonSerializableAttribute', along with any types that might be serialized polymorphically.
   at System.Text.Json.ThrowHelper.ThrowNotSupportedException_NoMetadataForType(Type type, IJsonTypeInfoResolver resolver)
   at System.Text.Json.JsonSerializerOptions.GetTypeInfoInternal(Type type, Boolean ensureConfigured, Nullable`1 ensureNotNull, Boolean resolveIfMutable, Boolean fallBackToNearestAncestorType)
   at System.Text.Json.WriteStackFrame.InitializePolymorphicReEntry(Type runtimeType, JsonSerializerOptions options)
   at System.Text.Json.Serialization.JsonConverter.ResolvePolymorphicConverter(Object value, JsonTypeInfo jsonTypeInfo, JsonSerializerOptions options, WriteStack& state)
   at System.Text.Json.Serialization.JsonConverter`1[[System.Object, System.Private.CoreLib, Version=9.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]].TryWrite(Utf8JsonWriter writer, Object& value, JsonSerializerOptions options, WriteStack& state)
   at System.Text.Json.Serialization.Converters.DictionaryOfTKeyTValueConverter`3[[System.Collections.Generic.Dictionary`2[[System.String, System.Private.CoreLib, Version=9.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e],[System.Object, System.Private.CoreLib, Version=9.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]], System.Private.CoreLib, Version=9.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e],[System.String, System.Private.CoreLib, Version=9.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e],[System.Object, System.Private.CoreLib, Version=9.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]].OnWriteResume(Utf8JsonWriter writer, Dictionary`2 value, JsonSerializerOptions options, WriteStack& state)
   at System.Text.Json.Serialization.JsonDictionaryConverter`3[[System.Collections.Generic.Dictionary`2[[System.String, System.Private.CoreLib, Version=9.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e],[System.Object, System.Private.CoreLib, Version=9.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]], System.Private.CoreLib, Version=9.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e],[System.String, System.Private.CoreLib, Version=9.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e],[System.Object, System.Private.CoreLib, Version=9.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]].OnTryWrite(Utf8JsonWriter writer, Dictionary`2 dictionary, JsonSerializerOptions options, WriteStack& state)
   at System.Text.Json.Serialization.JsonConverter`1[[System.Collections.Generic.Dictionary`2[[System.String, System.Private.CoreLib, Version=9.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e],[System.Object, System.Private.CoreLib, Version=9.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]], System.Private.CoreLib, Version=9.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]].TryWrite(Utf8JsonWriter writer, Dictionary`2& value, JsonSerializerOptions options, WriteStack& state)
   at System.Text.Json.Serialization.JsonConverter`1[[System.Collections.Generic.Dictionary`2[[System.String, System.Private.CoreLib, Version=9.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e],[System.Object, System.Private.CoreLib, Version=9.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]], System.Private.CoreLib, Version=9.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]].WriteCore(Utf8JsonWriter writer, Dictionary`2& value, JsonSerializerOptions options, WriteStack& state)
   --- End of inner exception stack trace ---
   at System.Text.Json.ThrowHelper.ThrowNotSupportedException(WriteStack& state, Exception innerException)
   at System.Text.Json.Serialization.JsonConverter`1[[System.Collections.Generic.Dictionary`2[[System.String, System.Private.CoreLib, Version=9.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e],[System.Object, System.Private.CoreLib, Version=9.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]], System.Private.CoreLib, Version=9.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]].WriteCore(Utf8JsonWriter writer, Dictionary`2& value, JsonSerializerOptions options, WriteStack& state)
   at System.Text.Json.Serialization.Metadata.JsonTypeInfo`1[[System.Collections.Generic.Dictionary`2[[System.String, System.Private.CoreLib, Version=9.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e],[System.Object, System.Private.CoreLib, Version=9.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]], System.Private.CoreLib, Version=9.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]].Serialize(Utf8JsonWriter writer, Dictionary`2& rootValue, Object rootValueBoxed)
   at System.Text.Json.JsonSerializer.Serialize[Dictionary`2](Utf8JsonWriter writer, Dictionary`2 value, JsonTypeInfo`1 jsonTypeInfo)
   at Microsoft.AspNetCore.Components.WebAssembly.Authentication.InteractiveRequestOptionsSerializerContext.OptionsRecordSerializeHandler(Utf8JsonWriter writer, OptionsRecord value)
   at System.Text.Json.Serialization.Metadata.JsonTypeInfo`1[[Microsoft.AspNetCore.Components.WebAssembly.Authentication.InteractiveRequestOptions.Converter.OptionsRecord, Microsoft.AspNetCore.Components.WebAssembly.Authentication, Version=9.0.4.0, Culture=neutral, PublicKeyToken=adb9793829ddae60]].Serialize(Utf8JsonWriter writer, OptionsRecord& rootValue, Object rootValueBoxed)
   at System.Text.Json.JsonSerializer.Serialize[OptionsRecord](Utf8JsonWriter writer, OptionsRecord value, JsonTypeInfo`1 jsonTypeInfo)
   at Microsoft.AspNetCore.Components.WebAssembly.Authentication.InteractiveRequestOptions.Converter.Write(Utf8JsonWriter writer, InteractiveRequestOptions value, JsonSerializerOptions options)
   at System.Text.Json.Serialization.JsonConverter`1[[Microsoft.AspNetCore.Components.WebAssembly.Authentication.InteractiveRequestOptions, Microsoft.AspNetCore.Components.WebAssembly.Authentication, Version=9.0.4.0, Culture=neutral, PublicKeyToken=adb9793829ddae60]].TryWrite(Utf8JsonWriter writer, InteractiveRequestOptions& value, JsonSerializerOptions options, WriteStack& state)
   at System.Text.Json.Serialization.JsonConverter`1[[Microsoft.AspNetCore.Components.WebAssembly.Authentication.InteractiveRequestOptions, Microsoft.AspNetCore.Components.WebAssembly.Authentication, Version=9.0.4.0, Culture=neutral, PublicKeyToken=adb9793829ddae60]].WriteCore(Utf8JsonWriter writer, InteractiveRequestOptions& value, JsonSerializerOptions options, WriteStack& state)
   at System.Text.Json.Serialization.Metadata.JsonTypeInfo`1[[Microsoft.AspNetCore.Components.WebAssembly.Authentication.InteractiveRequestOptions, Microsoft.AspNetCore.Components.WebAssembly.Authentication, Version=9.0.4.0, Culture=neutral, PublicKeyToken=adb9793829ddae60]].Serialize(Utf8JsonWriter writer, InteractiveRequestOptions& rootValue, Object rootValueBoxed)
   at System.Text.Json.JsonSerializer.WriteString[InteractiveRequestOptions](InteractiveRequestOptions& value, JsonTypeInfo`1 jsonTypeInfo)
   at System.Text.Json.JsonSerializer.Serialize[InteractiveRequestOptions](InteractiveRequestOptions value, JsonTypeInfo`1 jsonTypeInfo)
   at Microsoft.AspNetCore.Components.WebAssembly.Authentication.InteractiveRequestOptions.ToState()
   at Microsoft.AspNetCore.Components.WebAssembly.Authentication.NavigationManagerExtensions.NavigateToLogin(NavigationManager manager, String loginPath, InteractiveRequestOptions request)
   at App.Shared.LoginOrRegister.ClickButton() in C:\_development\App\src\App\Shared\LoginOrRegister.razor:line 44

.NET Version

9.0.201

Anything else?

I see #52291, which appears to be the same, but it is closed as resolved. Am I doing something wrong?
I have also tried the workaround in #45028 and that did not work either.

Note - I am using https://community.auth0.com/t/unable-to-add-parameters-to-login-request-using-blazor-remoteauthenticatorview-component/103763 as my reference implementation.

Metadata

Metadata

Assignees

Labels

area-authIncludes: Authn, Authz, OAuth, OIDC, Bearer

Type

Projects

No projects

Relationships

None yet

Development

No branches or pull requests

Issue actions