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.