Estoy usando Membership.create
la función de usuario, entonces ocurre el siguiente error,
El campo de formulario antifalsificación requerido "__RequestVerificationToken" no está presente
¿Cómo puedo arreglar esto?
asp.net-mvc-4
asp.net-membership
Hemant Soni
fuente
fuente
Html.AntiForgeryToken();
No funciona !! Convirtiéndose en@Html.AntiForgeryToken()
obrasEn mi caso, tuve esto en mi web.config:
<httpCookies requireSSL="true" />
Pero mi proyecto estaba configurado para no usar SSL. Al comentar esa línea o configurar el proyecto para usar siempre SSL, se resolvió.
fuente
IIS
hubo un enlace (https » EmptyHostName » IP » 443
) pero no hubo un enlace para (https » www.mysite.com » IP » 443
). Así que agregué un nuevo enlace con un nombre de host no vacío parahttps
eso era igual al dominio y resolvió el problema. He reescrito la configuraciónIIS
para forzarhttp 2 https
también.Me gusta esto:
El controlador
La vista:
fuente
También asegúrese de evitar no usar [ValidateAntiForgeryToken] en [HttpGet].
fuente
Recibirá el error incluso cuando las Cookies no estén habilitadas.
fuente
Otra cosa que puede causar esto (solo me encontré con esto) es la siguiente: si por alguna razón deshabilita todos los campos de entrada en su formulario. deshabilitará el campo de entrada oculto que contiene su token de verificación. cuando el formulario se regrese, el valor del token faltará y generará el error que falta. Entonces, lo que debe hacer es volver a habilitar el campo de entrada que contiene el token de verificación y todo estará bien.
fuente
Otra posibilidad para quienes cargamos archivos como parte de la solicitud. Si la longitud del contenido excede
<httpRuntime maxRequestLength="size in kilo bytes" />
y está utilizando tokens de verificación de solicitud, el navegador muestra el'The required anti-forgery form field "__RequestVerificationToken" is not present'
mensaje en lugar del mensaje de longitud excedida de la solicitud.Establecer maxRequestLength en un valor lo suficientemente grande como para atender la solicitud cura el problema inmediato, aunque admitiré que no es una solución adecuada (queremos que el usuario sepa el verdadero problema del tamaño del archivo, no el de los tokens de verificación de solicitud que faltan).
fuente
Asegúrese en su controlador de que tiene su atributo http como:
también agregue el atributo en el controlador:
En su formulario en su vista tiene que escribir:
Tenía Html.AntiForgeryToken (); sin el signo @ mientras estaba en un bloque de código, no dio un error en Razor pero sí en tiempo de ejecución. Asegúrese de mirar el signo @ de @ Html.Ant .. si falta o no
fuente
En mi caso, tenía este javascript en el formulario de envío:
Esto eliminaba el RequestVerificationToken oculto del formulario que se envía. Lo cambié a:
... y funcionó bien.
fuente
readonly
y excluí los controles ocultos. Parece funcionar bien.Si alguien experimenta el error por la misma razón por la que lo experimento, aquí está mi solución:
si tuvieras
Html.AntiForgeryToken();
cámbielo a
@Html.AntiForgeryToken()
fuente
En mi caso el dominio incorrecto en web.config para cookies fue el motivo:
fuente
En mi caso fue debido a la adición
requireSSL=true
dehttpcookies
en webconfig que hizo que el funcionamiento de la parada AntiForgeryToken. Ejemplo:Para hacer ambas cosas
requireSSL=true
y@Html.AntiForgeryToken()
trabajar, agregué esta línea dentroApplication_BeginRequest
deGlobal.asax
fuente
Recibí este error en Chrome con inicio de sesión predeterminado para ASP.NET con cuentas de usuario individuales
.cshtml:
Controlador:
Resuelto borrando los datos del sitio para el sitio:
fuente
En mi solución EPiServer en varios controladores había un atributo ContentOutputCache en la acción Index que aceptaba HttpGet. Cada vista para esas acciones contenía un formulario que se publicaba en una acción HttpPost en el mismo controlador o en uno diferente. Tan pronto como eliminé ese atributo de todas esas acciones del Índice, el problema desapareció.
fuente
Porque esto surge con la primera búsqueda de esto:
Tuve este problema solo en Internet Explorer y no pude averiguar cuál era el problema. En pocas palabras, no estaba guardando la porción de cookie del Token porque nuestro (sub) dominio tenía un guión bajo. Trabajó en Chrome pero a IE / Edge no le gustó.
fuente
Todas las otras respuestas aquí también son válidas, pero si ninguna de ellas resuelve el problema, también vale la pena verificar que los encabezados reales se estén pasando al servidor.
Por ejemplo, en un entorno de carga equilibrada detrás de nginx, la configuración predeterminada es eliminar el encabezado __RequestVerificationToken antes de pasar la solicitud al servidor, vea: el proxy inverso nginx simple parece eliminar algunos encabezados
fuente
A veces está escribiendo un método de acción de formulario con una lista de resultados. En este caso, no puede trabajar con un método de acción. Por lo tanto, debe tener dos métodos de acción con el mismo nombre. Uno con
[HttpGet]
y otro con[HttpPost]
atributo.En su
[HttpPost]
método de acción, establezca el[ValidateAntiForgeryToken]
atributo y también coloque@Html.AntiForgeryToken()
su formulario html.fuente
En mi caso, recibí este error al hacer una publicación AJAX, resultó que el valor __RequestVerificationToken no se pasaba en la llamada. Tuve que encontrar manualmente el valor de este campo y establecerlo como una propiedad en el objeto de datos que se envía al punto final.
es decir
data.__RequestVerificationToken = $('input[name="__RequestVerificationToken"]').val();
Ejemplo
HTML
Javascript
Controlador
fuente
public class MyDto { public bool Whatever { get; set; } }
Me gustaría compartir el mío, he estado siguiendo este tutorial anti falsificación usando asp.net mvc 4 con angularjs, pero arroja una excepción cada vez que solicito usar $ http.post y descubrí que la solución es simplemente agregar 'X- Solicitado con ':' XMLHttpRequest ' a los encabezados de $ http.post, porque parece que
(filterContext.HttpContext.Request.IsAjaxRequest())
no lo reconoce como ajax y aquí está mi código de ejemplo.App.js
var headers = { 'X-Requested-With': 'XMLHttpRequest', 'RequestVerificationToken': $scope.token, 'Content-Type': 'application/json; charset=utf-8;' };
$http({ method: 'POST', url: baseURL + 'Save/User', data: JSON.stringify($scope.formData), headers: headers }).then(function (values) { alert(values.data); }).catch(function (err) { console.log(err.data); });
SaveController
[HttpPost] [MyValidateAntiForgeryToken] public ActionResult User(UserModel usermodel) { ....
fuente