如何使用angularjs将http POST方法中的两个不同类型的参数传递给Web API?

时间:2016-09-01 06:33:02

标签: angularjs webapi2

第一个参数是复杂类型对象(JSON),第二个参数是简单类型(String)。这是我使用Web API 2.

我将我的代码放在下面。

Web API

 public class UserDetailsModel
 {
    [Key]
    [EmailAddress]
    public string LoginEmail { get; set; }

    public string FirstName { get; set; }
    public string LastName { get; set; }
    public string Password { get; set; }
    public string DisplayPic { get; set; }

    [EmailAddress]
    public string AlternateEmail { get; set; }

    public string Organization { get; set; }
    public string Occupation { get; set; }
    public string Contact { get; set; }
    public DateTime DoB { get; set; }
    public string Gender { get; set; }
    public string Country { get; set; }
    public string State { get; set; }
    public string City { get; set; }
    public string Website { get; set; }
    public string Info { get; set; }
    public DateTime DateOfRegister { get; set; }

    //public string LoginIP { get; set; }
    public int LoginFlag { get; set; }
}

public int RegisterUser(UserDetailsModel userReg, string LoginIP)
 {
     .
     .
     .
 }

angularjs

var UserDetails = {
                'LoginEmail': $scope.LoginEmail,
                'LoginName': $scope.LoginName,
                'Password': $scope.Password,
                'DoB': $scope.DoB,
                'Gender': $scope.Gender,
                'City': $scope.City,
                'State': $scope.State,
                'Country': $scope.Country
};
var request = $http({
        method: 'post',
        url: urlBase + '/UserDetails',
        params: { 'userRegJSON': UserDetails, 'LoginIP': LoginIP }
    });

在上面的代码中,我在UserDetails中获取NULL,在Web API中的LoginIP中获得192.152.101.102。

var request = $http({
        method: 'post',
        url: urlBase + '/UserDetails',
        data: { 'userRegJSON': UserDetails, 'LoginIP': LoginIP }
    });

在上面的代码中,我在Web API中的参数UserDetails和LoginIP中都是NULL。

然后如何使用angularjs在http POST方法中传递两个或更多不同的参数类型。

3 个答案:

答案 0 :(得分:2)

您无法在webAPI中传递两种类型。您可以在一种类型中传递所有内容,也可以执行以下操作

var request = $http({
    method: 'post',
    url: urlBase + '/UserDetails?LoginIp=' + LoginIP,
    data: UserDetails,

});

在API中将签名更改为

public int RegisterUser([FromBody]UserDetailsModel userReg, [FromUri]string LoginIP)
{
 .
 .
 .
}

答案 1 :(得分:0)

当您希望在POST中传递2个参数时,Webapi无法正常工作 方法。 Webapi中的ModelBinding始终针对单个对象进行操作,因为它映射模型。 您可以使用一些变通方法来完成这项工作:

在Conjunction中同时使用POST QueryString参数 如果您同时具有复杂和简单的参数,则可以在查询字符串上传递简单参数。您的代码应该实际使用: 像这样的东西

/baseUri/UserDetails?LoginIP=LoginIP

但这并不总是可行的。在此示例中,尽管在查询字符串上传递用户令牌可能不是一个好主意。

请参阅@Ravi A的suggestions进行代码更改。

答案 2 :(得分:0)

通过这个: 在我的api方法签名中使用简单和复杂类型 POST multiple objects from Angular controller to Web API 2