Cuando estás desarrollando una aplicación web MVC puede producirse el siguiente error:
El campo de formulario antifalsificación "__RequestVerificationToken" no está presente
El campo antifalsificación al que se refiere el error nos permite evitar los peligros de que otra aplicación de terceros haga solicitudes a nuestro métodos cuando no debería.
El error sucede cuando se ha agregado el atributo [ValidateAntiForgeryToken] a la Action que se está llamando en el Controller.
1. Solución 1: Hay que agregar:
@Html.AntiForgeryToken()
No te olvides de agregar el arroba.
2. Solución 2: Validar manualmente el campo de formulario antifalsificación. En mi caso, la solución 1 no funcionaba. Hay que quitar el atributo [ValidateAntiForgeryToken], y evaluar el token de forma manual, es decir obtener el token desde el request de la solicitud, obtener el valor y validar.
Dejo como ejemplo la función que podemos agregar en un Controller genérico que los demás Controller pueden heredar y esta función utilizarla en los métodos que necesiten implementar la validación.
public void ValidateRequestHeader(HttpRequestBase request) { string cookieToken = ""; string formToken = ""; string tokenHeader = HttpContext.Request.Headers.Get("RequestVerificationToken"); string[] tokens = tokenHeader.Split(':'); if (tokens.Length == 2) { cookieToken = tokens[0].Trim(); formToken = tokens[1].Trim(); } AntiForgery.Validate(cookieToken, formToken); }
0 Comentarios