从Angularjs $资源传递对象

时间:2015-10-02 19:22:35

标签: c# angularjs asp.net-web-api

我正在尝试从angularjs $ http函数调用WebApi方法。我尝试过使用标准的get,query和一个动作名称,但我已经纠正,意识到你无法通过Get传递一个对象。所以我正在使用Post。正在调用Web Api并返回我期望的值。但是,angularjs侧没有获得该值。这是最新的,不起作用:

的WebAPI

[RoutePrefix("api/frequentpawner")]
    public class FrequentPawnerController : ApiController
    {
        [HttpPost]
        public HttpResponseMessage Post([FromBody] FrequentPawnerReportCriteria criteria)
        {
            var repo = new FrequentPawnerReport();
            var result = repo.GetReport(criteria);
            var httpResult = new HttpResponseMessage(HttpStatusCode.OK);
            var jsonMediaTypeFormatter = new JsonMediaTypeFormatter
            {
                SerializerSettings =
                    {
                        ContractResolver = new CamelCasePropertyNamesContractResolver()
                    }
            };
            httpResult.Content = new ObjectContent<List<FrequentPawnerReport>>(result, jsonMediaTypeFormatter);
            return httpResult;
        }

 function getFrequentPawner(criteria) {
            return $http.post("/api/FrequentPawner/Post", criteria)
                .then (getFrequentPawnerComplete)
                .catch(getFrequentPawnerFailed);
            function getFrequentPawnerComplete(response) {
                var x = response.data;
                return response.data.results;
            }
            function getFrequentPawnerFailed(error) {
                alert("XHR failed for frequent pawner report: " + error.responseText);
            }
        }

标准对象:

vm.criteria = {         maxResults:25,         startDate:新日期(2014年,10年,1年),         endDate:new Date(2014,11,1),         isActive:是的,         transTypeId:1,         司法管辖区:[],         reportType:1,         关系:1,         make:'',         propertyGroupId:0,         propertyTypeId:0,         辖区数量:0,         storeCount:0,         useTypePawn:false,         useTypeScrap:false     }

任何想法都表示赞赏。

1 个答案:

答案 0 :(得分:0)

我在您的代码中看到一些错误。

  1. 你的get方法返回集合,所以这里'get' : {method: 'GET', isArray: false }, isArray 标志应该是 true ,否则当得到响应时你会从angular得到错误。

  2. 你的Get方法没有参数,所以你需要像

    这样的东西
    public IEnumerable<string> Get(FrequentPawnerReportCriteria criteria)
    
  3. 您混淆了Get和Post方法。因此,可能此操作FrequentPawnerReport应该是一个帖子,并且只返回一个对象。

    public FrequentPawnerReport Post([FromBody] FrequentPawnerReportCriteria criteria)
    {
        var repo = new FrequentPawnerReport();
        return repo.GetReport(criteria);
    }