如何使用 angularjs 将 http POST 方法中的两种不同类型的参数传递给 Web API?
How to pass two different types parameters in http POST method using angularjs to Web API?
第一个参数是一个复杂类型对象(JSON),第二个参数是一个简单类型(String)。这里我使用的是Web API 2.
我将我的代码放在下面。
网页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 }
});
在上面的代码中,我在 Web 中的 UserDetails 中得到 NULL,在 LoginIP 中得到 192.152.101.102 API。
var request = $http({
method: 'post',
url: urlBase + '/UserDetails',
data: { 'userRegJSON': UserDetails, 'LoginIP': LoginIP }
});
在上面的代码中,我在 Web 中的参数 UserDetails 和 LoginIP 中都得到了 NULL API。
那么如何使用angularjs.
在http POST方法中传递两个或多个不同的参数类型
您不能在 webAPI.Either 中传递 2 种类型,您可以在一种类型中传递所有内容,或者您可以执行以下操作
var request = $http({
method: 'post',
url: urlBase + '/UserDetails?LoginIp=' + LoginIP,
data: UserDetails,
});
在API中将签名改为
public int RegisterUser([FromBody]UserDetailsModel userReg, [FromUri]string LoginIP)
{
.
.
.
}
当您希望在 POST
中传递 2 个参数时,Webapi 不能很好地工作
方法。 Webapi 中的 ModelBinding 总是针对单个对象工作,因为它映射了一个模型。
您可以使用一些解决方法来完成这项工作:
在连词中同时使用 POST 和 QueryString 参数
如果您同时具有复杂参数和简单参数,则可以在查询字符串上传递简单参数。您的代码实际上应该适用于:
像这样
/baseUri/UserDetails?LoginIP=LoginIP
但这并不总是可能的。不过,在此示例中,在查询字符串上传递用户令牌可能不是一个好主意。
请参阅@Ravi A 的 以更改您的代码。
完成这个:
在我的 api 方法签名中使用简单类型和复杂类型
第一个参数是一个复杂类型对象(JSON),第二个参数是一个简单类型(String)。这里我使用的是Web API 2.
我将我的代码放在下面。
网页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 }
});
在上面的代码中,我在 Web 中的 UserDetails 中得到 NULL,在 LoginIP 中得到 192.152.101.102 API。
var request = $http({
method: 'post',
url: urlBase + '/UserDetails',
data: { 'userRegJSON': UserDetails, 'LoginIP': LoginIP }
});
在上面的代码中,我在 Web 中的参数 UserDetails 和 LoginIP 中都得到了 NULL API。
那么如何使用angularjs.
在http POST方法中传递两个或多个不同的参数类型您不能在 webAPI.Either 中传递 2 种类型,您可以在一种类型中传递所有内容,或者您可以执行以下操作
var request = $http({
method: 'post',
url: urlBase + '/UserDetails?LoginIp=' + LoginIP,
data: UserDetails,
});
在API中将签名改为
public int RegisterUser([FromBody]UserDetailsModel userReg, [FromUri]string LoginIP)
{
.
.
.
}
当您希望在 POST
中传递 2 个参数时,Webapi 不能很好地工作
方法。 Webapi 中的 ModelBinding 总是针对单个对象工作,因为它映射了一个模型。
您可以使用一些解决方法来完成这项工作:
在连词中同时使用 POST 和 QueryString 参数 如果您同时具有复杂参数和简单参数,则可以在查询字符串上传递简单参数。您的代码实际上应该适用于: 像这样
/baseUri/UserDetails?LoginIP=LoginIP
但这并不总是可能的。不过,在此示例中,在查询字符串上传递用户令牌可能不是一个好主意。
请参阅@Ravi A 的
完成这个:
在我的 api 方法签名中使用简单类型和复杂类型