首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我的Asp.Net 5 web api服务接收者将Json发布为NULL

我的Asp.Net 5 web api服务接收者将Json发布为NULL
EN

Stack Overflow用户
提问于 2015-11-08 14:25:12
回答 2查看 359关注 0票数 0

你好,因为我无法将Json数据发送到Asp.Net 5的API服务,所以我使用了在StackOverflow中找到的方法:

代码语言:javascript
复制
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;
    };

我决定:

代码语言:javascript
复制
'Content-Type': 'application/x-www-form-urlencoded'

但是,当我发展到更复杂的模型时,这个param方法不能转换如下的数据模型:

代码语言:javascript
复制
{ RoleStatuses: [{Role: "Admin", IsInRole: true}, {Role: "User", IsInRole: false}, ...], UserName: "MyUser" }

当我在are中接收到这个模型时,UserName是被识别的,但是数组计数= 0,当我想以json的形式发送这个数据时,UserName和Array都是空的,我在这种情况下无法更进一步,所以请提供帮助。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-11-09 14:19:05

由于有了互联网,我找到了我的答案来放置这个属性:

代码语言:javascript
复制
[HttpPost]
    [Route("UpdateRoles")]
    public AdminAccountGenericResponse UpdateRoles([FromBody]RoleStatusUserModel model)
    {

模型参数前面的FromBody

票数 2
EN

Stack Overflow用户

发布于 2015-11-08 21:55:10

帖子是:

JSON

RoleStatuses对象{Role=“管理员”、IsUserInRole=false、$$hashKey=“对象:53”}、对象{Role=“编辑”、IsUserInRole=false、$$hashKey=“对象:54”}、对象{Role=“成员”、IsUserInRole=true、$$hashKey=“对象:55”}、对象{Role=“用户”、IsUserInRole=true、$$hashKey=" Object :56"}

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

$$hashKey“对象:53”

IsUserInRole假

角色“管理员”

1对象{Role=“编辑”、IsUserInRole=false、$$hashKey=“对象:54”}

$$hashKey“目标:54”

IsUserInRole假

角色“编辑”

2对象{Role=“成员”、IsUserInRole=true、$$hashKey=“对象:55”}

$$hashKey“目标:55”

IsUserInRole真

角色“成员”

3对象{Role=“用户”、IsUserInRole=true、$$hashKey=“对象:56”}

$$hashKey“目标:56”

IsUserInRole真

角色“用户”

UserName "Armin“

来源{“RoleStatuses”:{“角色”:“管理员”,"IsUserInRole":false,“$$hashKey”:“对象:53”},{“角色”:“编辑”:"IsUserInRole":false,“$$hashKey”:“对象:54”},{“角色”:“成员”,"IsUserInRole":true,“$$hashKey”:“$$hashKey:”对象:55},{“用户”,“IsUserInRole”:真,“$$hashKey”:“对象:56”},"UserName":"Armin"} }

和Header是:

查看源缓存-控制

私有,最大年龄=0内容长度

18964内容-类型

text/html;charset=utf-8日期

太阳,2015年11月8日21:42:59格林尼治标准时间X动力

ASP.NET X源文件

=?UTF-8?B?QzpcVXNlcnNcbWF6aWFfMDAwXERlc2t0b3BcV2ViQW5ndWxhclxzcmNcV2ViQW5ndWxhclx3d3dyb290XGFwaVxBZG1pbkFjY291bnRcVXBkYXRlUm9sZXM =?=视图源接受

应用程序/json接受-编码gzip,压缩接受-语言en-US,en;q=0.5缓存-控制

无缓存连接

保持活的内容长度

296内容-类型

应用程序/json;charset=UTF-8 Cookie

.ASPXANONYMOUS=BJm2d-pQ0QEkAAAANzQ1YWFkY2UtMTgyYi00NWE4LWI0ZTgtNjczZTcyZDY2Yzdi248xiSOVN90mD-0q5eEh6bMyxhZub9zJ7JIMsaU9BP81;WebAngularCookie=C029A9A2E3E114C01C2D8F3829B00D7C18FDB1740D16E006EF09F098BA056355BC782EED8BBF129FF 8AB546EED2758409BEB5B0D4AF0D5EDDF11C6BF6FDB84235DCA60E86EBF1D4B1B34449915E4ACCF6A31F11DF0B83AC1FF0F3 A0A5FE17209C1BE91E7A90BE720FBD1B88AE46D6DFA4B0F450E29725F63B65974F5E552F15FBD37BF7C017E9A4DD13ECD942 09EE99672255DB2961B30FE319E608897CD513F81CA350C90374AF22000DAF39A69A5F7主机

本地主机:13661 Pragma

无缓存引用程序http://localhost:13661/Admin/ManageUser/?userName=Armin RequestVerificationToken

CfDJ8LcZVsUv5KZJqpUyBqND_NYoqgSfNrV2Z1YEIuE6u2YSRdGF9Oec2SLkyfxmgIkOEBoQ9F2O7tm24jw-7_MXL-DGAbhQt-dcCYt0rY-hhBwHsA9w5Qf6ql4HegBAuHrkUCZbxgW8BTZkNlBuwlZOJ4c :CfDJ8LcZVsUv5KZJqpUyBqND_NYE7Fd-vdtFHfxlHC2qLWHx2THGQuNbIhWLleaRBgC4SaQqkC1pEMP0yoi9p5QihhKxMpKe0da M3OE5Wg6S8ZHyLG2dZyrUJYmGVB_izi_yq2hb4VgDngQlCzx6Qv7Fo28用户代理

Mozilla/5.0 (WindowsNT6.3;WOW64;rv:41.0)

客户端服务:

代码语言:javascript
复制
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服务:

代码语言:javascript
复制
    [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 = ""
        };
    }

与模型:

代码语言:javascript
复制
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; }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33595012

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档