Estoy construyendo un módulo Orchard CMS que estoy probando en un sitio de Orchard 1.3.10. El módulo muestra una vista de detalles de una de mis entidades y tengo un botón de "favoritos" en el que me gustaría hacer clic y realizar una publicación de AJAX en una acción del controlador para guardar la entidad como favorita en la base de datos.Orchard CMS Ajax Token antifalsificación cuando se conectó
En la vista tengo el siguiente código:
<div style="padding: 10px;">
<span data-id="@Model.Id" id="addFavorite" style="cursor: pointer;">
[Add Favorite]
</span>
</div>
<script type="text/javascript">
$("#addFavorite").click(function() {
alert("here we go...");
$.ajax({
type: "post",
dataType: "",
url: "/orchardlocal/mymodule/stuff/AddFavorite",
data: { id: $(this).data("id") },
success: function (response) {
alert("it worked");
}
});
});
</script>
Mi acción del controlador es ...
[HttpPost]
public ActionResult AddFavorite(int id)
{
return View();
}
Cuando ejecuto el sitio sin tener que entrar en Orchard, este código de mensajes atrás justo multa. Si inicio sesión y hago clic en Agregar favorito, obtengo esta excepción ...
No se proporcionó un token antifalsificación requerido o no era válido.
System.Web.Mvc.HttpAntiForgeryException no fue manejado por el código de usuario Mensaje = No se proporcionó un token antifalsificación requerido o no fue válido. Fuente = System.Web.WebPages ErrorCode = -2147467259 WebEventCode = 0 StackTrace: en System.Web.Helpers.AntiForgeryWorker.Validate (HttpContextBase contexto, sal String) en System.Web.Helpers.AntiForgery.Validate (HttpContextBase HttpContext, sal String) en System.Web.Mvc.ValidateAntiForgeryTokenAttribute.OnAuthorization (AuthorizationContext> filterContext) en Orchard.Mvc.AntiForgery.AntiForgeryAuthorizationFilter.OnAuthorization (AuthorizationContext filterContext) en C: \ code \ OrchardDev2 \ src \ Orchard \ MVC \ AntiForgery \ AntiForgeryAuthorizationFilter.cs: línea 37 en System.Web.Mvc.ControllerActionInvoker.InvokeAuthorizationFilters (ControllerContext controllerContext, filtros IList`1, ActionDescriptor a ctionDescriptor) en System.Web.Mvc.ControllerActionInvoker.InvokeAction (ControllerContext ControllerContext, Cadena actionName) InnerException:
¿Por qué se trata el mensaje de forma diferente cuando se haya identificado y no?
¿Cómo puedo suministrar un token anti-falsificador para evitar esto?
Gracias, Brian
Sebastien, creo que hay un error tipográfico en el sentido de que __RequestVerificationToken debe estar dentro de los datos {}, ¿correcto? Además, cuando agrego el @ Html.AntiForgeryTokenValueOrchard() al javascript, obtengo una línea ondulada en VS diciendo: "La compilación condicional se borró". He leído en otra publicación que dice que este es un error Razor, pero debería hacer esto ... @ (Html.AntiForgeryTokenValueOrchard()). Pero, cuando hago esto, obtengo el error de Javascript "error de sintaxis 4". ¿Qué más podría estar perdiendo aquí? Gracias, Brian –
Completé la respuesta tomando tu comentario en la cuenta –
Sebastien, esto funciona genial. ¡Gracias! –