Я новичок в фреймворке MVC3 (и .NET в целом; ветеран Java), так что потерпите меня, но здесь идет речь:
Входные данные, отправленные в контроллер как JSON, похоже, не подчиняютсяHttpRequestValidation - это звучит правильно?
Я понимаю, что если вы получаете ввод данных через JSON, вы, возможно, уже проделываете с ним дополнительную работу, но действие контроллера не обязательно знает, есть ли у него данные JSONв таком случае;входные значения сопоставляются с параметрами, как если бы они были стандартными параметрами POST.
Пример. Я асинхронно отправляю данные JSON на мой контроллер, как показано ниже:
var data = { "title": $titleField.val(), "content": $textArea.val(),
"location": $location.val()
};
$.ajax(submitUrl,
{
type: "POST",
contentType: "application/json; charset=utf-8",
complete: function (data) {
//blah blah
},
dataType: 'json',
data: JSON.stringify(data)
});
}
Затем я получаювведите в моем действии:
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult New(string title = "", string content = "", string location = "")
{
//yada yada
}
При этом параметры сопоставляются, и пользователь может легко отправлять теги и т. д. Я не отключаю ValidateInput, и если я отправляю со стандартным POST и удаляю Stringify, он выдает ошибку, как и ожидалось.Любая веская причина, по которой данные JSONified пропускают проверку?
Редактировать - Более конкретный вопрос: если данные JSONified будут проходить HttpRequestValidation, как мы можем защитить от события, когда кто-то намеренно издевается над запросомотправлять данные в формате JSON вместо параметров post?Я не нашел способа заставить метод Action различать параметры, передаваемые как JSON, и передаваемые незашифрованные.