2016-11-30 64 views
0

我想从angularJs控制器传递对象参数到Web Api 2获取方法控制器。AngularJS传递参数到Web Api获取

如果我传递对象像字符串它将工作,但我不喜欢这个解决方案。

[HttpGet] 
public IEnumerable<SearchVenueByParameters_Result> Get(string parameter) 
    { 
     ObjSearch obj_search = new JavaScriptSerializer().Deserialize<ObjSearch>(parameter); 

我想试试这个:

[HttpGet] 
    public IEnumerable<SearchVenueByParameters_Result> Get(ObjSearch obj_search) 

ObjSearch类:

public class ObjSearch { 
    public string aAMSID { get; set; } 
    public string venueName { get; set; } 
    public string address { get; set; } 
    public byte? businessSK { get; set; } 
    public string subjectAamsCode { get; set; } 
    public string subjectDenomination { get; set; } 
    public string subjectVatNumber { get; set; } 
    public string subjectTaxCode { get; set; } } 

而且在angularjs控制器我有:

$scope.objSearch = { 
     "aAMSID": "", 
     "venueName": "", 
     "address": "", 
     "businessSK": "", 
     "subjectAamsCode": "", 
     "subjectDenomination": "", 
     "subjectVatNumber": "", 
     "subjectTaxCode": "" 
     } 

$scope.searchVenueByParameters = function() { 

    var strObjSearch = angular.toJson($scope.objSearch); 
    console.log(strObjSearch); 
    $http({ 
     url: '/api/SearchVenueByParameters_Result/', 
     method: 'GET', 
     params: { obj_search: strObjSearch } 
    }).success(function (data) { 
     $scope.Venues = data; 
     $scope.VenueList = true; 
     $scope.showItem = true; 

}) 
    .error(function() { 
     $scope.error = "An Error has occured while loading posts!"; 
    }); 
    } 

但在这种情况下,我已更正值打印ed在控制台从angularjs控制器,但传递在网络abi控制器的对象始终为空。

回答

0

使用GET发送复杂对象时,使用[FromUri]属性可直接从URL创建对象。

在客户端的对象添加到PARAMS

$http({ 
    url: '/api/SearchVenueByParameters_Result/', 
    method: 'GET', 
    params: $scope.objSearch 
}).success(function (data) { 
    $scope.Venues = data; 
    $scope.VenueList = true; 
    $scope.showItem = true; 

的URL将被转换为类似于

/api/SearchVenueByParameters_Result/?aAMSID=1&venueName=1&address=1&businessSK=1&subjectAamsCode=1&subjectDenomination=1&subjectVatNumber=1&subjectTaxCode=1 

而在所述控制器中,添加[FromUri]属性

[HttpGet] 
public IEnumerable<SearchVenueByParameters_Result> Get([FromUri]ObjSearch obj_search) 

你可以阅读更多关于属性here

+0

我也可以使用FromBody吗?因为它不起作用 –

+0

@FrancescoGaleota GET请求是设计没有一个正文。所以[FromBody]不适用于GET。 –

0

您应该使用Post将对象发送到WEB API。用这些代码替换您的代码

+0

我需要获取信息,而不是邮政。不能工作 –