Also habe ich meinen Kopf gegen die Wand geschlagen, und ich kann keine guten Quellen dafür finden. Vielleicht vergesse ich, wie das Model-Binding-Zeug in MVC3 funktioniert, aber hier ist, was ich versuche: Ich habe einen Editor, der mit Knockout verbunden ist, um mit der Bearbeitung eines Modells zu arbeiten. Es gibt nicht viel zu dem Modell:Veröffentlichen eines JSON-Modells auf ASP.Net MVC3 mit Anti-Fälschungs-Token
public class SetupTemplate
{
public int Id { get; set; }
public string Name { get; set; }
public string Template { get; set; }
}
Die Signatur der Aktion i zu nennen bin versucht:
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult UpdateTemplate(SetupTemplate template)
Aus einer anderen Frage auf hier, ich diese eher hilfreich Schnipsel abgeholt bekommen die Fälschungs token:
window.addAntiForgeryToken = function(data) {
data.__RequestVerificationToken = $('#__AjaxAntiForgeryForm input[name=__RequestVerificationToken]').val();
return data;
};
die alle zusammen kommt mit mir versuchen, ein Update über ajax schreiben:
payload = window.addAntiForgeryToken(ko.mapping.toJS(self.data));
$.ajax({
type: "post",
url: endpoint,
data: payload,
success: function(data) {
//Handle success
}});
, die in Form Datenteil der Chrome-Entwickler-Tool in diesen Ergebnisse
Id:1
Name:Greeting
Template: [Template Text]
__RequestVerificationToken: [The really long anti-forgery token]
Der Fälschungstoken wird aufgenommen, aber mein Modell ist null. Die meisten Beispiele, die ich gesehen habe, verwenden nur einen einzigen übergebenen Parameter und kein Modell.
Ich bin sicher, ich vermisse etwas Offensichtliches, irgendwelche Erkenntnisse darüber, was es sein könnte?
EDIT: Als Reaktion auf @ Mark, um das Gespräch zu diesem Wechsel:
$.ajax({
type: "post",
dataType: "json",
contentType: 'application/json',
url: endpoint,
data: JSON.stringify(payload),
success: function(data) {
//Do some stuff
}});
Ergebnisse in einer Anfrage-Payload dieses:
{"Id":1,"Name":"Greeting","Template":"...","__RequestVerificationToken":"..."}:
Und der Server die Anti-Abholung Fälschungs-Token. Dies wurde sowohl mit als auch ohne die contentType
Parameter an $.ajax()
versucht.
Ich aktualisierte meine Frage mit einer Antwort darauf. Kurz gesagt: immer noch keine Würfel. –
Ist dieser Post http://haacked.com/archive/2011/10/10/preventing-csrf-with-ajax.aspx hilft Ihnen? – VJAI
und das http://StackOverflow.com/Questions/2906754/How-Cani-Supply-an-antiforgerytoken-when-posting-JSON-Data-using-Ajax – VJAI