Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

289
Visualizações
Problema principal de ASP.net AntiForgeryToken: los datos no se vinculan al modelo

Tengo un proyecto de trabajo para un sistema de reservas en el núcleo de asp.net que utiliza un gráfico de línea de tiempo de Google. Cuando hace clic en el gráfico, aparece una ventana emergente modal con una vista parcial para ingresar datos. Javascript tiene un evento de clic en el botón Guardar para enviar los datos al controlador. El controlador valida los datos y envía la vista parcial a javascript, donde se envía de nuevo a la ventana emergente modal. Tengo dos indicadores en la vista que, si se establece en verdadero, javascript oculta la ventana emergente. Todo esto funciona hasta que decoro el controlador con [ValidateAntiForgeryToken]

tengo el codigo de la siguiente manera


Puesta en marcha:

 services.AddAntiforgery(options => { options.HeaderName = "RequestVerificationToken"; });

JavaScript:

 (function() { var PlaceHolderElement = $('#PlaceHolderHere'); //create popup save PlaceHolderElement.on('click', '[data-save="modal"]', function(event) { event.preventDefault(); var form = $(this).parents('.modal').find('form'); var token = $("input[name='__RequestVerificationToken']").val(); var actionUrl = form.attr('action'); var sendData = form.serialize(); $.ajax({ type: 'POST', url: actionUrl, data: sendData, }).done(function(data1) { var newBody = $('.modal-body', data1); PlaceHolderElement.find('.modal-body').replaceWith(newBody); var isValid = newBody.find('[name="IsValid"]').val() === 'True'; var isValid2 = newBody.find('[name="BookingFree"]').val() === 'True'; if (isValid && isValid2) { PlaceHolderElement.find('.modal').modal('hide'); location.reload(); } }) })

Controlador:

 [HttpPost] public IActionResult EditBooking(BookingViewModel model) { if (ModelState.IsValid) { ... other code } }

cuando decoro el controlador con [ValidateAntiForgeryToken] y cambio el jarvascript a

 data: { model: sendData, __RequestVerificationToken: token, }

¡Validar funciona pero el modelo está vacío! si declaro el modelo como una cadena, obtengo una cadena.

Si envío el token en encabezados:, la validación del token falla

Necesito los datos en el modelo para que ModelState establezca IsValid

over 4 years ago · Santiago Trujillo
1 Respostas
Responde à pergunta

0

1. .serialize() pasará los datos del formulario junto con el valor __RequestVerificationToken de forma predeterminada.

2. Cuando use el elemento de formulario con method="post" y el asistente de etiquetas, generará dinámicamente una entrada de token cuyo name="__RequestVerificationToken" dentro del formulario. Pero si especifica el atributo de action para el formulario como: <form action="/url" method="post"></form> , no generará la entrada del token.

Entonces, si especifica el atributo de action , debe agregar manualmente la entrada del token usando @Html.AntiForgeryToken() en el formulario:

 <form action="/url" method="post"> @Html.AntiForgeryToken() //.... </form>

Una demostración de trabajo simple que podría seguir:

Vista:

 <form asp-action="EditBooking" asp-controller="Home" method="post"> <input asp-for="Name" /> <input type="button" onclick="PostForm()" value="Post" /> </form> @section Scripts { <script> function PostForm() { //var token = $("input[name='__RequestVerificationToken']").val(); var actionUrl = $('form').attr('action'); var sendData = $('form').serialize(); console.log(sendData) $.ajax({ type: 'POST', url: actionUrl, data: sendData, }).done(function(data1) { }) } </script> }

Y no es necesario agregar el siguiente código:

 services.AddAntiforgery(options => { options.HeaderName = "RequestVerificationToken"; });
over 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda