visual tutorial studio net mvc framework existing ejemplo asp asp.net-mvc-4 asp.net-membership

asp.net mvc 4 - tutorial - El campo de formulario antifalsificación requerido "__RequestVerificationToken" no está presente Error en el registro del usuario



membership c# ejemplo (15)

Estoy utilizando Membership.create user function, luego aparece el siguiente error,

El campo de formulario antifalsificación requerido "__RequestVerificationToken" no está presente

¿Cómo puedo arreglar esto?


Asegúrese de que en su controlador tenga su atributo http como:

[HttpPost]

también agregue el atributo en el controlador:

[ValidateAntiForgeryToken]

En su forma en su punto de vista, debe escribir:

@Html.AntiForgeryToken();

Tenía Html.AntiForgeryToken (); sin el signo @ mientras estaba en un bloque de código, no dio un error en Razor pero lo hizo en tiempo de ejecución. Asegúrese de mirar el signo @ de @ Html.Ant .. si falta o no


En mi caso, el dominio incorrecto en web.config para las cookies fue el motivo:

<httpCookies domain=".wrong.domain.com" />


En mi caso, tuve este javascript en el formulario enviado:

$(''form'').submit(function () { $(''input'').prop(''disabled'', true); });

Esto eliminaba el RequestVerificationToken oculto del formulario que se enviaba. Lo cambié a:

$(''form'').submit(function () { $(''input[type=submit]'').prop(''readonly'', true); $(''input[type=text]'').prop(''readonly'', true); $(''input[type=password]'').prop(''readonly'', true); });

... y funcionó bien.


En mi caso, tuve esto en mi web.config:

<httpCookies requireSSL="true" />

Pero mi proyecto estaba configurado para no usar SSL. Comentar esa línea o configurar el proyecto para usar siempre SSL lo resolvió.


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 estaba publicando en una acción HttpPost al mismo controlador o a otro diferente. Tan pronto como eliminé ese atributo de todas esas acciones del Índice, el problema desapareció.


Me gusta esto:

El controlador

[HttpPost] [ValidateAntiForgeryToken] public ActionResult MethodName(FormCollection formCollection) { ... Code Block ... }

La vista:

@using(Html.BeginForm()) { @Html.AntiForgeryToken() <input name="..." type="text" /> // rest }


Me gustaría compartir el mío, he estado siguiendo este tutorial anti forgerytoken usando asp.net mvc 4 con angularjs, pero arroja una excepción cada vez que solicito usar $ http.post y me di cuenta de que la solución es solo agregar ''X- Solicitado-Con '':'' XMLHttpRequest '' a los encabezados de $ http.post, porque parece que el (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) { ....


Otra cosa que puede causar esto (simplemente se encontró con esto) es la siguiente: si por algún motivo deshabilita todos sus campos de entrada en su formulario. deshabilitará el campo de entrada oculto que contiene su token de verificación. cuando el formulario será publicado, 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.


Otra posibilidad para aquellos de nosotros cargando 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 mensaje ''The required anti-forgery form field "__RequestVerificationToken" is not present'' lugar de la solicitud mensaje de longitud excedida

Establecer maxRequestLength en un valor lo suficientemente grande como para atender la solicitud soluciona el problema inmediato, aunque admitiré que no es una solución adecuada (queremos que el usuario conozca el verdadero problema del tamaño del archivo, no el de los tokens de verificación de solicitud faltantes).


Porque esto surge con la primera búsqueda de esto:

Tenía este problema solo en Internet Explorer y no pude entender cuál era el problema. En resumen, no estaba guardando la parte de la cookie del Token porque nuestro (sub) dominio tenía un guión bajo. Trabajó en Chrome pero a IE / Edge no le gustó.


Recibirá el error incluso cuando las Cookies no estén habilitadas.


Si alguien experimenta el error por la misma razón por la que lo experimento, esta es mi solución:

si tuvieras Html.AntiForgeryToken();

cámbielo a @Html.AntiForgeryToken()


También asegúrese de evitar usar [ValidateAntiForgeryToken] en [HttpGet].

[HttpGet] public ActionResult MethodName() { .. }


Tiene el atributo [ValidateAntiForgeryToken] antes de su acción. También debe agregar @Html.AntiForgeryToken() en su formulario.


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 pasen al servidor.

Por ejemplo, en un entorno de equilibrio de carga detrás de nginx, la configuración predeterminada es quitar el encabezado __RequestVerificationToken antes de pasar la solicitud al servidor, ver: el proxy inverso simple de nginx parece quitar algunos encabezados