Ошибка при запуске приложения: действие не может использовать параметры формы и тела JSON одновременно.C#

Место общения программистов C#
Ответить
Anonymous
 Ошибка при запуске приложения: действие не может использовать параметры формы и тела JSON одновременно.

Сообщение Anonymous »

В новом проекте Blazor WebApp я конвертирую столько C#, сколько могу, чтобы можно было создать как можно большую часть приложения на предпочитаемом мной языке. Сюда входит почти все, что есть в program.cs.
Проблема: ближе к концу program.cs (с включенными в него Identity и Sample Pages) мы обнаруживаем этот вызов:

Код: Выделить всё

app.MapAdditionalIdentityEndpoints();
Я успешно преобразовал все в этом методе расширения в VB.NET, и он был собран, но во время выполнения столкнулся с проблемой. Проблема заключается в этой лямбде:

Код: Выделить всё

accountGroup.MapPost("/Logout", async (
ClaimsPrincipal user,
SignInManager signInManager,
[FromForm] string returnUrl) =>
{
await signInManager.SignOutAsync();
return TypedResults.LocalRedirect($"~/{returnUrl}");
});
Поскольку VB.NET не поддерживает атрибуты лямбда-параметров (например, ), мне пришлось расширить это:

Код: Выделить всё

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 специально не оформлен. Однако когда я немного изменяю подпись и добавляю атрибут , например:

Код: Выделить всё

 SignInManager As SignInManager(Of ApplicationUser)
...приложение запускается.
Однако проблема в том, что SignInManager имеет значение null, когда функция делегирования называется. Оно также равно нулю, когда я использую , хотя SignInManager регистрируется заранее:

Код: Выделить всё

builder.Services.AddIdentityCore(options => options.SignIn.RequireConfirmedAccount = true)
.AddEntityFrameworkStores()
.AddSignInManager()
.AddDefaultTokenProviders();
Ни одно из этих действий не проявляется, когда я запускаю версию лямбды C#.
Я понятия не имею, с чего начать поиск решения к этому. Я швыряю в стену странные вещи, просто чтобы посмотреть, прилипнут ли они. Я попробовал все атрибуты 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?
Ни одно из этих действий не проявляется в версии C#.
Поиск ответов на этот вопрос оказался бессмысленным, учитывая вовлеченные факторы. Я думаю, что мой сценарий довольно редкий.
Я новичок в Blazor; Я не уверен, что здесь происходит внутри. Почему вывод вызывает проблему в моей версии VB.NET, но не в версии C#? Как мне запустить этот код?

Подробнее здесь: https://stackoverflow.com/questions/783 ... parameters
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»