Я пытаюсь передать токену AntiForgery и сериализованному сериализованному объекту в действие, но после всех попыток я все равно не могу.
Я попытался отправить их в виде параметров, разделенных запятыми, а также включить токен в строковый параметр.
var jsonModelData = JSON.stringify(
{
'personViewModel': serializedObject['PersonViewModel'],
'identityUserViewModel': serializedObject['IdentityUserViewModel'],
'entityPersonAddressViewModel' : entityAddressSerializedObject['EntityPersonAddresses'],
'telephoneViewModel': telephoneSerializedObject,
'virtualAddressViewModel': virtualAddressSerializedObject
});
$.ajax({
type: "POST",
//contentType: "application/json; charset=utf-8",
dataType: "json",
url: "@Url.Action("Save")",
data: { __RequestVerificationToken: token }, jsonModelData,
success: function (data)
{
, который работает против валидатора, но строковый параметр сериализованных объектов тогда равен нулю
и затем также это (которое не проходит мимо [ValidateAntiForgeryToken])
var jsonModelData = JSON.stringify(
{
'__RequestVerificationToken': token,
'personViewModel': serializedObject['PersonViewModel'],
'identityUserViewModel': serializedObject['IdentityUserViewModel'],
'entityPersonAddressViewModel': entityAddressSerializedObject['EntityPersonAddresses'],
'telephoneViewModel': telephoneSerializedObject,
'virtualAddressViewModel': virtualAddressSerializedObject
});
$.ajax({
type: "POST",
//contentType: "application/json; charset=utf-8",
dataType: "json",
url: "@Url.Action("Save")",
data: jsonModelData,
и Действие:
[HttpPost]
[ValidateAntiForgeryToken]
public async Task<ActionResult> Save(PersonViewModel personViewModel
, IdentityUserViewModel identityUserViewModel
, List<EntityPersonAddress> entityPersonAddressViewModel
, List<TelephoneViewModel2> telephoneViewModel
, List<VirtualAddressViewModel> virtualAddressViewModel)
{
}
Редактирование и решение:
Мне пришлось изменить параметр моего действия на именованный параметр с различными объектами, связанными в одном классе, и включить токен в качестве первого параметра в ajax, а также опустить ajax contentType для «application / json; etc».
Теперь это выглядит так.
$.ajax({
type: "POST",
dataType: "json",
url: "@Url.Action("Save")",
data: { __RequestVerificationToken: token, MultiViewModel: jsonModelData},
и Действие:
[HttpPost]
[ValidateAntiForgeryToken]
public async Task<ActionResult> Save(PersonUserModel MultiViewModel) {
где PersonViewModel - это класс, который содержит все предыдущие и индивидуально заявленные viewModel.