我的Asp.Net 5 web api服务收到Posted Json为NULL

本文关键字:Posted Json NULL 服务 Net Asp web api 我的 | 更新日期: 2023-09-27 18:20:59

您好,由于我无法将Json数据发送到Asp.Net 5的API服务,我使用在StackOverflow中找到的方法:

var param = function (obj) {
        var query = '';
        var name, value, fullSubName, subName, subValue, innerObj, i;
        for (name in obj) {
            value = obj[name];
            if (value instanceof Array) {
                for (i = 0; i < value.length; ++i) {
                    subValue = value[i];
                    fullSubName = name + '[' + i + ']';
                    innerObj = {};
                    innerObj[fullSubName] = subValue;
                    query += param(innerObj) + '&';
                }
            }
            else if (value instanceof Object) {
                for (subName in value) {
                    subValue = value[subName];
                    fullSubName = name + '[' + subName + ']';
                    innerObj = {};
                    innerObj[fullSubName] = subValue;
                    query += param(innerObj) + '&';
                }
            }
            else if (value !== undefined && value !== null) {
                query += encodeURIComponent(name) + '=' + encodeURIComponent(value) + '&';
            }
        }
        return query.length ? query.substr(0, query.length - 1) : query;
    };

我设置:

'Content-Type': 'application/x-www-form-urlencoded'

但当我发展到更复杂的模型时,这个param方法无法转换像这样的数据模型

{ RoleStatuses: [{Role: "Admin", IsInRole: true}, {Role: "User", IsInRole: false}, ...], UserName: "MyUser" }

当我在API服务中收到这个模型时,UserName被识别,但Array计数=0,当我想将这个数据作为json发送时,UserName和Array都为空,我陷入了这种情况,无法继续,所以请帮助。

我的Asp.Net 5 web api服务收到Posted Json为NULL

多亏了互联网,我找到了放置属性的答案:

[HttpPost]
    [Route("UpdateRoles")]
    public AdminAccountGenericResponse UpdateRoles([FromBody]RoleStatusUserModel model)
    {

[FromBody]在Model参数前面。

POST是:

JSON-

角色状态[Object{Role="Administrators",IsUserInRole=false,$$hashKey="Object:53"},Object{Role="Editors",IsUserInRole=false,$$hashKey="Object:54"}、Object{Role="Members"、IsUserInRole=true、$$hashKey="Object:55"}

0Object{Role="Administrators",IsUserInRole=false,$$hashKey="Object:53"}

$$hashKey"对象:53"

IsUserInRole错误

角色"管理员"

1Object{Role="Editors",IsUserInRole=false,$$hashKey="Object:54"}

$$hashKey"对象:54"

IsUserInRole错误

角色"编辑"

2Object{Role="Members",IsUserInRole=true,$$hashKey="Object:55"}

$$hashKey"对象:55"

IsUserInRole真实

角色"会员"

3Object{Role="Users",IsUserInRole=true,$$hashKey="Object:56"}

$$hashKey"对象:56"

IsUserInRole真实

角色"用户"

用户名"Armin"

来源{"RoleStatuses":[{"角色":"Administrators","IsUserInRole":false,"$$hashKey":"object:53"},{"Role":"Editors","IsUserInRole":false,"$$hashKey":"object:54"},{:55"},{"角色":"用户","IsUserInRole":true,"$$hashKey":"object:56"}],"用户名":"Armin"}

标题是:

查看源缓存控制
私人,最大年龄=0内容长度
18964内容类型
text/html;charset=utf-8日期
2015年11月8日星期日21:42:59 GMTX-Powered-By-
ASP.NETX-SourceFiles
=?UTF-8?BQzpcVXNlcnCbWF6aWFfMDAwXERlc2t0b3BcV2ViQW5ndWxhclxzcmNcV2ViQW5 ndWxxclx3d3dyb290XGFwaVxBZG1pbkFjY291bnRcVXBkYXRUm9ZXM==查看源接受
application/json接受编码gzip,放气接受语言en-US,en;q=0.5缓存控制
无缓存连接
保持生命内容长度
296内容类型
application/json;charset=UTF-8Cookie
.ASPXANOYMOUS=BJm2d-pQ0QEkAAAANzQ1YWFkY2UtMTgyYi00NWE4LWI0ZTgtNjczZTcyZDY2Yzdi248xiSOVN90mD-0q5eEh6bMyxhZub9zJ7JIMsaU9BP81;WebAngularCookie=C029A9A2E3E114C01C2D8F3829B00D7C18FDB1740D16E006EF09F098BA056355BC78EED8BF129FF8ab546eed 2758409电子邮箱地址84235dca60电子邮箱地址34449915电子邮箱地址A0A5FE17209C1BE91E7A90BE720FBD1B88AE46D6DFA4B0F450E29725F63B65974F5E552F15FBD37BF7C017E9A4DD13ECD94209ee99672255db2961b30fe319e608897cd513f81ca350c90374af22000daf39a65f7主机
本地主机:13661Pragma
无缓存推荐人http://localhost:13661/Admin/ManageUser/?userName=ArminRequestVerificationToken
CfDJ8LcZVsUv5KZJqpUyBqND_NYoqgSfNrV2Z1YEIuE6u2YSRdGF9Oec2SLkyfxmgIkOEBoQ9F2O7tm24jw-7_XL-DGAbhQt-dcCYt0rY-hhBwHsA9w5Qf6ql4HegBAuHrkUCZbxgW8BTZkNlBuwlZOJ4c:CfDJ8LcZVsUv5KZJqpUyBqND_NYE7Fd-vdtFHfxlHC2qLWHx2THGQuNbIhWLleaRBgC4SaQqkC1pEMP0yoi9p5QihhKxMpKe0daM3OE5Wg6S8ZHyLG2dZyrUJYmGVB_izi_yq2hb4VgDngQlCzx6Qv7Fo28用户代理
Mozilla/5.0(Windows NT 6.3;WOW64;rv:41.0)Gecko/20100101 Firefox/41.0

客户端服务:

updateRoles: function (roleStatusUserModel, successSucceed, successFailed, error) {                
            $http({
                url: '/api/AdminAccount/UpdateRoles',
                method: "POST",
                data: JSON.stringify(roleStatusUserModel),
                headers: {
                    'Content-Type': 'application/json', 'Accept': 'application/json', 'RequestVerificationToken': $rootScope.RequestVerificationToken
                }
            })
               .success(function (data) {
                   if (data.Success == true) {
                       theMessage = data.Message;
                       theError = data.Error;
                       successSucceed();
                   }
                   else {
                       theMessage = data.Message;
                       theError = data.Error;
                       successFailed();
                   }
               }).error(function () {
                   error();
               });
        }

和Api服务:

    [HttpPost]
    [Route("UpdateRoles")]
    public AdminAccountGenericResponse UpdateRoles(RoleStatusUserModel model)
    {
        ValidateRequestHeader(Request);
        if (!Authorize(Context, Request, new string[] { "Administrators" }))
            throw new ApplicationException("Not Authorized");
        var roles = Roles.GetAllRoles();
        //MembershipUser user = Membership.GetUser(model.UserName);
        foreach (string role in roles)
        {
            RoleStatus roleStat = model.RoleStatuses.FirstOrDefault(rs => rs.Role == role);
            if (roleStat != null)
            {
                if (roleStat.IsUserInRole == true && !Roles.IsUserInRole(model.UserName, role))
                {
                    Roles.AddUserToRole(model.UserName, role);
                }
                else if (roleStat.IsUserInRole == false && Roles.IsUserInRole(model.UserName, role))
                {
                    Roles.RemoveUserFromRole(model.UserName, role);
                }
                else
                { }
            }
            else
            {
                return new AdminAccountGenericResponse
                {
                    Success = false,
                    Message = "",
                    Error = "Role is null."
                };
            }
        }
        return new AdminAccountGenericResponse
        {
            Success = true,
            Message = "Roles Updated",
            Error = ""
        };
    }

型号:

public class RoleStatus
{
    public string Role { get; set; }
    public bool IsUserInRole { get; set; }
}
public class RoleStatusUserModel
{
    public List<RoleStatus> RoleStatuses { get; set; }
    public string UserName { get; set; }
}