$ .ajax工作,但$ .post失败

时间:2016-11-17 08:12:51

标签: javascript jquery

我正在尝试使用发布数据的简写版本。我的旧方式有效。我不明白为什么新方法不起作用。

在我的控制器上,所有值都为NULL。但在旧的工作版本中,他们解析得很好。

工作:

 $.ajax({
            url: 'api/User/Register',
            type: 'POST',
            contentType: 'application/json',
            data: JSON.stringify({
                EmailAddress: self.RegisterEmailAddress(),
                Password: self.RegisterPassword(),
                TimeZoneID: self.RegisterTimeZoneID(),
                Firstname: self.RegisterFirstname(),
                Surname: self.RegisterSurname()
            }),
            dataType: 'json'
        }).done(function (data) {
            alert(data);
        });

不工作:

var registerdata = JSON.stringify({
    EmailAddress: self.RegisterEmailAddress(),
    Password: self.RegisterPassword(),
    TimeZoneID: self.RegisterTimeZoneID(),
    Firstname: self.RegisterFirstname(),
    Surname: self.RegisterSurname()
});

var uri = 'api/User/Register';

$.post(uri, registerdata)
    .done(function(data){
        alert(data);
    });

新版本有什么不对? 请注意,正如我发布的那样,标题具有正确的数据:

{"EmailAddress":"me@here.com","Password":"password","TimeZoneID":"4","Firstname":"Test","Surname":"Users"}:

在我的控制器上,api看起来像这样:

[HttpPost]
public string Register(UserRegistrationRequestDto register)
{
    var reply = _userService.Register(register);
    return $"{reply.FriendlyMessage}";
}

UserRegistrationRequestDto定义为:

 public class UserRegistrationRequestDto : BaseRequestDto
    {
        public string EmailAddress { get; set; }
        public string Password { get; set; }
        public int TimeZoneID { get; set; }
        public string Firstname { get; set; }
        public string Surname { get; set; }
    }

我不明白为什么短版本无效。

请注意,另外一个电话100%

 var logindata = JSON.stringify({
            EmailAddress: self.LoginEmailAddress(),
            Password: self.LoginPassword()
        });

        var uri = 'api/User/Login'

        $.post(uri, logindata)
            .done(function (data) {
                alert(data);
            });

2 个答案:

答案 0 :(得分:2)

您可以将设置传递给.post,如下所示:

$.post({url: uri, contentType: "application/json", data: registerdata});

答案 1 :(得分:-1)

尝试这样。

var registerdata = {
            EmailAddress: self.RegisterEmailAddress(),
            Password: self.RegisterPassword(),
            TimeZoneID: self.RegisterTimeZoneID(),
            Firstname: self.RegisterFirstname(),
            Surname: self.RegisterSurname()
        };
var uri = 'api/User/Register';

$.post(uri, registerdata,
     function(response){
        alert(response);
      },"JSON");