2

最初のパラメーターは複合型オブジェクト (JSON) で、2 番目のパラメーターは単純型 (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 メソッドで 2 つ以上の異なるパラメーター タイプを渡す方法。

4

3 に答える 3

2

webAPI で 2 つの型を渡すことはできません。単一の型ですべてを渡すか、以下を実行できます。

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

});

API で署名を

public int RegisterUser([FromBody]UserDetailsModel userReg, [FromUri]string LoginIP)
{
 .
 .
 .
}
于 2016-09-01T06:44:09.773 に答える
0

メソッドで 2 つのパラメーターを渡したい場合、Webapi はうまく機能しませんPOST 。Webapi の ModelBinding は、モデルをマップするため、常に単一のオブジェクトに対して機能します。これを機能させるために使用できるいくつかの回避策があります。

POSTパラメーターQueryString パラメーターの両方を組み合わせて使用​​する 複雑なパラメーターと単純なパラメーターの両方がある場合は、クエリ文字列に単純なパラメーターを渡すことができます。あなたのコードは実際に動作するはずです:このようなもの

/baseUri/UserDetails?LoginIP=LoginIP

しかし、それが常に可能であるとは限りません。ただし、この例では、クエリ文字列でユーザー トークンを渡すことはお勧めできません。

コードの変更については、@Ravi A の提案を参照してください。

于 2016-09-01T06:46:11.037 に答える