Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

236
Views
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

about 4 years ago · Juan Pablo Isaza
1 answers
Answer question

0

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

2. Cuando utiliza 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"; });
about 4 years ago · Juan Pablo Isaza Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!