对 Web API 的 PUT 请求的 JSON 反序列化问题

本文关键字:JSON 反序列化 问题 请求 PUT Web API | 更新日期: 2023-09-27 18:33:33

>我正在尝试使用 WebAPI 对资源执行更新

我有一个执行操作的控制器

管理员控制器类

[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; }
  }

阿贾克斯代码

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;
    },

琴师

网址: 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":"ttt@gnote.com","Language":"Hindi"}

当我执行 PUT 操作(提琴手和代码)时,在 put 方法(代码隐藏)中收到的管理对象将对象中的所有类型设置为默认值,即传递的值没有反序列化。

关于我可以对 JSON 做什么的任何想法,服务器不喜欢它?

对 Web API 的 PUT 请求的 JSON 反序列化问题

因为您使用的是DataContractJsonSerializer所以应该添加相关属性。

类属性:

[DataContract]

方法属性:

[DataMember]