Por lo tanto, he estado golpeando mi cabeza contra la pared con esto, y no puedo encontrar ninguna buena fuente para esto. Tal vez me estoy olvidando de cómo funciona el encuadernado modelo en MVC3, pero esto es lo que estoy tratando de hacer: Tengo un editor vinculado con Knockout para manejar la edición de un modelo. No hay mucho al modelo:Publicación de un modelo JSON en ASP.Net MVC3 con token Anti-falsificación
public class SetupTemplate
{
public int Id { get; set; }
public string Name { get; set; }
public string Template { get; set; }
}
La firma de la acción que estoy tratando de llamar es:
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult UpdateTemplate(SetupTemplate template)
De otra pregunta aquí, cogí este fragmento más útiles para obtener el símbolo anti-falsificación:
window.addAntiForgeryToken = function(data) {
data.__RequestVerificationToken = $('#__AjaxAntiForgeryForm input[name=__RequestVerificationToken]').val();
return data;
};
cual todo viene junto conmigo tratando de publicar una actualización a través de AJAX:
payload = window.addAntiForgeryToken(ko.mapping.toJS(self.data));
$.ajax({
type: "post",
url: endpoint,
data: payload,
success: function(data) {
//Handle success
}});
que se traduce en esto en la sección del formulario de datos de las herramientas para desarrolladores de Chrome
Id:1
Name:Greeting
Template: [Template Text]
__RequestVerificationToken: [The really long anti-forgery token]
El token antiforgery se recogió, pero mi modelo es nula. La mayoría de los ejemplos que he visto de esto solo usan un único parámetro pasado, y no un modelo.
Estoy seguro de que me falta algo obvio, ¿alguna idea de lo que podría ser?
EDIT: En respuesta a @ Marcos, cambiando la llamada a este:
$.ajax({
type: "post",
dataType: "json",
contentType: 'application/json',
url: endpoint,
data: JSON.stringify(payload),
success: function(data) {
//Do some stuff
}});
resultados en una carga útil de esta solicitud:
{"Id":1,"Name":"Greeting","Template":"...","__RequestVerificationToken":"..."}:
y el servidor no recoger el anti token de falsificación Esto se intentó con y sin los parámetros contentType
a $.ajax()
.
Actualicé mi pregunta con una respuesta a esto. En resumen: todavía no hay dados. –
¿Te ayuda esta publicación http://haacked.com/archive/2011/10/10/preventing-csrf-with-ajax.aspx? – VJAI
y este http://stackoverflow.com/questions/2906754/how-can-i-supply-an-antiforgerytoken-when-posting-json-data-using-ajax – VJAI