Проблема: ближе к концу program.cs (с включенными в него Identity и Sample Pages) мы обнаруживаем этот вызов:
Код: Выделить всё
app.MapAdditionalIdentityEndpoints();
Код: Выделить всё
accountGroup.MapPost("/Logout", async (
ClaimsPrincipal user,
SignInManager signInManager,
[FromForm] string returnUrl) =>
{
await signInManager.SignOutAsync();
return TypedResults.LocalRedirect($"~/{returnUrl}");
});
Код: Выделить всё
Public Module Extensions
Private Delegate Function LogoutDelegate(
User As ClaimsPrincipal,
SignInManager As SignInManager(Of ApplicationUser),
ReturnUrl As String) As Task(Of RedirectHttpResult)
Public Function MapSomeAdditionalIdentityEndpoints(Endpoints As IEndpointRouteBuilder) As IEndpointConventionBuilder
Dim oLogoutHandler As LogoutDelegate
Dim oAccountGroup As RouteGroupBuilder
oLogoutHandler = AddressOf LogoutAsync
oAccountGroup = Endpoints.MapGroup("/Account")
oAccountGroup.MapPost("/Logout", oLogoutHandler)
Return oAccountGroup
End Function
Private Async Function LogoutAsync(
User As ClaimsPrincipal,
SignInManager As SignInManager(Of ApplicationUser),
ReturnUrl As String) As Task(Of RedirectHttpResult)
Await SignInManager.SignOutAsync()
Return TypedResults.LocalRedirect($"~/{ReturnUrl}")
End Function
End Module
Когда я использую эту подпись, приложение вылетает при запуске (
Код: Выделить всё
app.Run). Вот полное сообщение об ошибке:
An unhandled exception of type 'System.InvalidOperationException' occurred in System.Private.CoreLib.dll
An action cannot use both form and JSON body parameters.
Below is the list of parameters that we found:
Parameter | Source
---------------------------------------------------------------------------------`
SignInManager | Body (Inferred)
ReturnUrl | Form (Attribute)
Код: Выделить всё
SignInManager As SignInManager(Of ApplicationUser)
Однако проблема в том, что SignInManager имеет значение null, когда функция делегирования называется. Оно также равно нулю, когда я использую , хотя SignInManager регистрируется заранее:
Код: Выделить всё
builder.Services.AddIdentityCore(options => options.SignIn.RequireConfirmedAccount = true)
.AddEntityFrameworkStores()
.AddSignInManager()
.AddDefaultTokenProviders();
Я понятия не имею, с чего начать поиск решения к этому. Я швыряю в стену странные вещи, просто чтобы посмотреть, прилипнут ли они. Я попробовал все атрибуты From*, я попытался удалить из параметра ReturnUrl как для делегата, так и для функции соответственно.Он аварийно завершает работу с оформлением делегата, но не с функцией, и запускается с оформлением функции, но не делегата. Но в последнем случае я получаю ошибку 415, когда нажимаю кнопку «Выход». И 415, когда я удаляю оба украшения.
Изменение ReturnUrl на для согласования с выводом для SignInManager также вызывает ошибку произошел сбой, хотя и с немного другой ошибкой:
Код: Выделить всё
Failure to infer one or more parameters.
Below is the list of parameters that we found:
Parameter | Source
---------------------------------------------------------------------------------
SignInManager | Body (Inferred)
ReturnUrl | UNKNOWN
Did you mean to register the "UNKNOWN" parameters as a Service?
Поиск ответов на этот вопрос оказался бессмысленным, учитывая вовлеченные факторы. Я думаю, что мой сценарий довольно редкий.
Я новичок в Blazor; Я не уверен, что здесь происходит внутри. Почему вывод вызывает проблему в моей версии VB.NET, но не в версии C#? Как мне запустить этот код?
Подробнее здесь: https://stackoverflow.com/questions/783 ... parameters
Мобильная версия