1

Я пытаюсь выполнить обновление на ресурс, используя 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, что серверу это не нравится?

+1

Попытка добавления '[DataMember]' на одного из членов, а также '[DataContract]' на классе 'AdminAction'. Кроме того, какой WebAPI вы используете 1 или 2? Вы используете Json.NET или DataContractJsonSerializer? –

+0

Я перенесла свой проект с OpenRasta на WebApi, этот Api работал в OpenRasta, поэтому я проигнорировал эти атрибуты плохо. – sham

ответ

1

Поскольку вы используете DataContractJsonSerializer, вы должны добавить соответствующие атрибуты. Класс

Атрибут:

[DataContract] 

Метод Атрибут:

[DataMember] 
Смежные вопросы