Я пытаюсь выполнить обновление на ресурс, используя WebAPIJSON вопрос десериализации с запросом PUT к Web API
У меня есть контроллер, который выполняет операцию
AdminController класс
[HttpPut]
[Route("newprofile")]
public HttpResponseMessage Update(AdminAction adminAction)
{
if (_adminManager.ApproveUser(adminAction))
{
return Request.CreateResponse(HttpStatusCode.OK);
}
return Request.CreateResponse(HttpStatusCode.BadRequest);
}
Ресурс
public class AdminAction : BaseResource
{
public bool Approve { get; set; }
public bool Delete { get; set; }
public string EmailId { get; set; }
public string Language { get; set; }
[IgnoreDataMember]
public Language eLanguage { get; set; }
}
Ajax код
activate: function (e) {
var email = this.model.get('Email');
var adminAction = {
"Approve": true,
"Delete": false,
"EmailId": email,
"Language": $("#ddlMotherTongue").val()
}
var url = kf.Settings.apiUrl() + '/admin/newprofile';
$.ajax(url, {
type: "put",
data: JSON.stringify(adminAction),
success: function (data, textStatus, jqXHR) {
alert('Profile approved');
$("table tr td").filter(function() {
return $(this).text().trim() == email;
}).parent('tr').css({'border': '1px solid green', 'border-left': 'none', 'border-right': 'none','color':'green'});
},
error: function (jqXHR, textStatus, errorThrown) {
if (jqXHR.status == 400) {
var errorJson = jQuery.parseJSON(jqXHR.responseText);
if (errorJson.hasOwnProperty("Errors")) {
switch (errorJson.Errors[0].ErrorType) {
}
}
}
},
async: true
});
return false;
},
Скрипач
URL: http://lapi.x.com/admin/newprofile
Заголовки запросов
Accept: application/json
Accept-Encoding: gzip, deflate
Accept-Language: en-US,en;q=0.8
Authorization: Token dd39c761-3060-498b-9393-92b12cace238
Connection: keep-alive
Content-Length: 76
Content-Type: application/json
Host: lapi.x.com
Origin: http://x.com
Referer: http://x.com/
тело
{"Approve":true,"Delete":false,"EmailId":"[email protected]","Language":"Hindi"}
Когда я исполняю PUT операцию (Скрипач и код) объект админа получил в методе пут (код позади) имеет все типы в объекте установить значения по умолчанию, т.е. переданных значений являются не десериализован.
Любые идеи о том, что я мог сделать с JSON, что серверу это не нравится?
Попытка добавления '[DataMember]' на одного из членов, а также '[DataContract]' на классе 'AdminAction'. Кроме того, какой WebAPI вы используете 1 или 2? Вы используете Json.NET или DataContractJsonSerializer? –
Я перенесла свой проект с OpenRasta на WebApi, этот Api работал в OpenRasta, поэтому я проигнорировал эти атрибуты плохо. – sham