将数据从http请求传递给C#控制器

时间:2015-03-17 11:18:22

标签: javascript c# angularjs angular-http

服务

comaxApp.factory('user', function($http) {
  return {
    login: function(loginInfo) {
      $http({
        url: './data/LogIn',
        method: "POST",
        data: loginInfo,
        headers: {
          'Content-Type': 'application/json'
        }
      }).success(function(data, status, headers, config) {
        $scope.users = data.users;
      }).error(function(data, status, headers, config) {
        $scope.status = status + ' ' + headers;
      });
    }
  };
});

控制器

$scope.login = function() {
    var loginInfo = {
        "user": "admin",
        "password": "123"
    };
    loginInfo = JSON.stringify(loginInfo);
    user.login(loginInfo).then(function(users) {
        $scope.users = users.data;
    }, function(status) {});
};

MVC控制器

public string LogIn(string loginInfo) {

  var obj = new JavaScriptSerializer();
  var result = obj.DeserializeObject(loginInfo);


  var db = new comaxDataEntities();
  var linq = db.accounts.Where(u => u.userName == loginInfo);
  var useraccount = linq.FirstOrDefault < account > ();

  var javaScriptSerializer = new JavaScriptSerializer();
  string jsonString = javaScriptSerializer.Serialize(useraccount);
  return jsonString;

}
嘿同性恋我的问题是,当我将数据传递给C#controller时,我的loginInfo是 null 有效负载是正常的并显示stringify loginfo但我的方法没有得到logInfo。请帮助我,我是c#part

的新手

2 个答案:

答案 0 :(得分:2)

您的服务应该将stringify数据传递给服务器,因为您在JSON.stringify({loginInfo: loginInfo})

等操作上将参数声明为字符串

<强> CODE

$http({
    url: './data/LogIn',
    method: "POST",
    data: JSON.stringify({
        loginInfo: loginInfo
    }),
    headers: {
        'Content-Type': 'application/json'
    }
}).success(function(data, status, headers, config) {
    $scope.users = data.users;
}).error(function(data, status, headers, config) {
    $scope.status = status + ' ' + headers;
});

为了更好的方式,我更喜欢在服务器端创建loginInfo类,它将直接映射到类,您不需要对其进行反序列化。

答案 1 :(得分:0)

进行以下更改 -

<强> C#

创建一个新类 -

public class LoginInformation
{
   public string user { get; set;}
   public string password { get; set; }
}

更改LogIn方法的参数以使用新类

public string LogIn(LoginInformation loginInfo)
{
}

<强>角

从控制器中删除此行(因为您已提到标题:{&#39; Content-Type&#39;:&#39; application / json&#39;})

loginInfo = JSON.stringify(loginInfo);

确保网址(网址:&#39; ./ data / LogIn&#39;,)是有效的。