aquí hay otro obstáculo para mí, quiero que mi sitio permanezca protegido contra ataques entre sitios, estoy desarrollando un formulario maestro/detalle usando asp.net mvc 5 a través de la solicitud Ajax, entonces, para crear una entrada, tenemos que pasar por el proceso de solicitud de Ajax, de esta manera:
$.ajax({ url: '/Sales/Create', data: JSON.stringify(salesmain), type: 'POST', contentType: 'application/json;', dataType: 'json', success: function (result) { if (result.Success == "1") { window.location.href = "/Sales/index"; } else { alert(result.ex); } } });ahora, no está navegando a la acción Crear en el controlador de ventas, como dice la solicitud ajax, y antes de eso, arroja la siguiente excepción:
El campo de formulario antifalsificación requerido "__RequestVerificationToken" no está presente.
He buscado mucho en Google pero aún no he tenido éxito, es por eso que estoy aquí, he leído algunos blogs que dicen buscar el campo oculto __RequestVerificationToken usando jquery y agregarlo a los valores del formulario, adjuntando el JSON.stringify(salesmain) en una función, de esta manera:
$.ajax({ . . addRequestVerificationToken(JSON.stringify(salesmain))y la función:
function addRequestVerificationToken(data) { data.__RequestVerificationToken = $('input[name=__RequestVerificationToken]').val(); return data; };Además, ya tengo la siguiente estructura de código:
@using (Html.BeginForm()) { @Html.AntiForgeryToken() . .y el atributo antes de la acción Crear:
[HttpPost] [ValidateAntiForgeryToken] public JsonResult Create([Bind(Include = "SalesId,ReferenceNo,SalesDate,SalesPerson")] SalesMain salesMain) { . .y también estoy usando jQuery 1.5, puede ser el culpable, si no, ¿qué debo hacer para resolver este problema? Cualquier AYUDA será muy apreciada, gracias de antemano :)
Su función addRequestVerificationToken() no agrega el token porque ya ha clasificado los datos (ya no es un objeto javascript, por lo que data.__RequestVerificationToken = $(...) no hace nada).
Puede hacer que esto funcione cambiando el código a
data: JSON.stringify(addRequestVerificationToken(salesmain)), sin embargo, esto no es necesario ya que no necesita clasificar los datos. En su lugar, elimine la opción contentType: 'application/json;', para que use la application/x-www-form-urlencoded; charset=UTF-8' y uso
data: addRequestVerificationToken(salesmain), o mejor aún, si ha generado correctamente su vista usando los métodos HtmlHelper y sus entradas contienen el atributo de nombre correcto ( name="SalesId" , name="ReferenceNo" etc.), entonces simplemente use
data: $('form').serialize(),`que serializará correctamente todas las entradas en su formulario, incluido el token.