【问题标题】:Call WebApi from Angularjs $resource passing object从 Angularjs $resource 传递对象调用 WebApi
【发布时间】:2015-12-31 02:10:17
【问题描述】:

我正在尝试从 angularjs $http 函数调用 WebApi 方法。我尝试使用标准的 get、查询和操作名称,但我更正地意识到您不能使用 Get 传递对象。所以我正在使用邮政。正在调用 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 = { 最大结果:25, 开始日期:新日期(2014 年 10 月 1 日), endDate: 新日期(2014, 11, 1), isActive:真, transTypeId: 1, 司法管辖区:[], 报告类型:1, 关系:1, 制作: '', 属性组ID:0, 属性类型ID:0, 管辖权数:0, 商店计数:0, 使用TypePawn:假, 使用TypeScrap:假 }

感谢任何想法。

【问题讨论】:

  • 它如何不工作?浏览器控制台中的错误?服务器上的错误?什么都不做?
  • first: IEnumerable&lt;FrequentPawnerReport&gt; Get 如果你返回集合 - 为什么在这里 'get' : {method: 'GET', isArray: false }, 你将标志 isArray 设置为 false
  • 它根本没有调用 WebApi 例程。我的理解是,如果将isArray设置为false,它可以返回一个对象。
  • 你能提供你如何设置路由吗?
  • 这是Web Api webapiconfig.cs 注册方法:

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


【解决方案1】:

我在您的代码中发现了一些错误。

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

  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);
    }
    

【讨论】:

  • 如果我要检索数据,为什么要使用 Post 方法?我传递的条件对象是通过控制器发送到存储库方法的条件的集合。此外,它根本没有触及 Web Api 控制器。我什至更改了调用以检索无参数的 Get,但它没有调用它。
  • @rsalit,所以你用错了 :-) 你尝试从不带参数的 js 动作中调用,因为对于带参数的动作,你添加了另一个路由
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-10-06
  • 1970-01-01
相关资源
最近更新 更多