Tak, waliłem głową w ścianę i nie mogę znaleźć dla niego dobrych źródeł. Być może zapominam o tym, jak modelowe elementy wiążące działają w MVC3, ale oto co próbuję zrobić: mam jakiegoś edytora związanego z Knockoutem do obsługi edycji modelu. Nie ma wiele do modelu:Umieszczanie modelu JSON na ASP.Net MVC3 z torem zabezpieczającym przed fałszerstwem
public class SetupTemplate
{
public int Id { get; set; }
public string Name { get; set; }
public string Template { get; set; }
}
Podpis działania Próbuję zadzwonić to:
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult UpdateTemplate(SetupTemplate template)
Z innego pytanie o tutaj, wziąłem to raczej jako fragment, aby uzyskać anty-fałszowanie tokena:
window.addAntiForgeryToken = function(data) {
data.__RequestVerificationToken = $('#__AjaxAntiForgeryForm input[name=__RequestVerificationToken]').val();
return data;
};
Który wszystko przychodzi razem ze mną próbuje odpowiedzieć aktualizacji za pośrednictwem ajax:
payload = window.addAntiForgeryToken(ko.mapping.toJS(self.data));
$.ajax({
type: "post",
url: endpoint,
data: payload,
success: function(data) {
//Handle success
}});
co skutkuje tym w sekcji formularz danych narzędzi deweloperskich Chrome
Id:1
Name:Greeting
Template: [Template Text]
__RequestVerificationToken: [The really long anti-forgery token]
zabezpieczającym tokena jest odbierany, ale mój model jest null. Większość przykładów widziałem po prostu użyć jednego parametru przekazanego wzdłuż, a nie model.
Jestem pewien, że brakuje mi czegoś oczywistego, jakiegokolwiek wglądu w to, co to może być?
EDIT: W odpowiedzi na @Mark, zmieniając wezwanie do tego:
$.ajax({
type: "post",
dataType: "json",
contentType: 'application/json',
url: endpoint,
data: JSON.stringify(payload),
success: function(data) {
//Do some stuff
}});
Skutkuje to żądanie ładowności to:
{"Id":1,"Name":"Greeting","Template":"...","__RequestVerificationToken":"..."}:
i serwer nie podnosząc anty- token fałszerstwa. Zostało to wypróbowane zarówno z parametrami contentType
jak i bez nich, do .
Zaktualizowałem moje pytanie z odpowiedzią na to. W skrócie: nadal nie ma kości. –
Czy ten post http://haacked.com/archive/2011/10/10/preventing-csrf-with-ajax.aspx pomaga? – VJAI
i ten http://stackoverflow.com/questions/2906754/how-can-i-supply-an-antiforgerytoken-when-posting-json-data-using-ajax – VJAI