Saltar al contenido

incluir antiforgerytoken en ajax post ASP.NET MVC

Nuestros desarrolladores estrellas agotaron sus provisiones de café, por su búsqueda día y noche por la solución, hasta que Antonio halló el resultado en Bitbucket así que hoy la comparte contigo.

Solución:

Ha especificado incorrectamente el contentType para application/json.

He aquí un ejemplo de cómo podría funcionar esto.

Controlador:

public class HomeController : Controller

    public ActionResult Index()
    
        return View();
    

    [HttpPost]
    [ValidateAntiForgeryToken]
    public ActionResult Index(string someValue)
    
        return Json(new  someValue = someValue );
    

Vista:

@using (Html.BeginForm(null, null, FormMethod.Post, new  id = "__AjaxAntiForgeryForm" ))

    @Html.AntiForgeryToken()


Click me to send an AJAX request to a controller action decorated with the [ValidateAntiForgeryToken] attribute

Otro El enfoque (menos javascriptish), que hice, es algo como esto:

Primero, un ayudante Html

public static MvcHtmlString AntiForgeryTokenForAjaxPost(this HtmlHelper helper)

    var antiForgeryInputTag = helper.AntiForgeryToken().ToString();
    // Above gets the following: 
    var removedStart = antiForgeryInputTag.Replace(@"", "");
    if (antiForgeryInputTag == removedStart 

que devolverá un string

__RequestVerificationToken:"P5g2D8vRyE3aBn7qQKfVVVAsQc853s-naENvpUAPZLipuw0pa_ffBf9cINzFgIRPwsf7Ykjt46ttJy5ox5r3mzpqvmgNYdnKc1125jphQV0NnM5nGFtcXXqoY3RpusTH_WcHPzH4S4l1PmB8Uu7ubZBftqFdxCLC5n-xT0fHcAY1"

entonces podemos usarlo así

$(function () 
    $("#submit-list").click(function () 
        $.ajax(
            url: '@Url.Action("SortDataSourceLibraries")',
            data:  items: $(".sortable").sortable('toArray'), @Html.AntiForgeryTokenForAjaxPost() ,
            type: 'post',
            traditional: true
        );
    );
);

¡Y parece funcionar!

es tan simple! cuando usas @Html.AntiForgeryToken() en su código html significa que el servidor ha firmado esta página y cada solicitud que se envía al servidor desde esta página en particular tiene una señal que impide que los piratas informáticos envíen una solicitud falsa. por lo tanto, para que el servidor autentique esta página, debe realizar dos pasos:

1.enviar un parámetro llamado __RequestVerificationToken y para obtener su valor use los siguientes códigos:


por ejemplo tomar una llamada ajax

$.ajax(
    type: "POST",
    url: "/Account/Login",
    data: 
        __RequestVerificationToken: gettoken(),
        uname: uname,
        pass: pass
    ,
    dataType: 'json',
    contentType: 'application/x-www-form-urlencoded; charset=utf-8',
    success: successFu,
);

y el paso 2 simplemente decora tu método de acción [ValidateAntiForgeryToken]

Aquí puedes ver las reseñas y valoraciones de los usuarios

Ten en cuenta difundir este artículo si te valió la pena.

¡Haz clic para puntuar esta entrada!
(Votos: 2 Promedio: 4.5)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *