除非参数以int

时间:2015-12-04 16:35:22

标签: c# angularjs odata

我有这个OData控制器,适用于GET和Patch方法。但是,我必须创建一个自定义GET方法,以便用于从不同的服务器加载数据并复制到OData检索数据的新数据。当用户“检索”新数据时,它会将日期作为参数发送。由于这是对日期的新声明,我无法将日期放在$ filter中,因此是新的GET方法。

这就是GET方法的样子:

        [ODataRoute("Claims({key})")]
        [HttpGet]
        [EnableQuery(AllowedQueryOptions= System.Web.OData.Query.AllowedQueryOptions.All)]
        public HttpResponseMessage ClaimByDate([FromODataUri] int key)
        {
            System.Diagnostics.Debug.WriteLine(key);
            string date = key.ToString();
            DateTime claimDate = DateTime.ParseExact(date, "ddMMyyyy", CultureInfo.InvariantCulture);
            DateTime today = DateTime.Today;

            if (!ClaimsExistForToday(today))
            {
                GenerateClaimsList(today, claimDate);
                return Request.CreateResponse(HttpStatusCode.OK);
            }

            return Request.CreateResponse(HttpStatusCode.NotModified);

        }

这是angularjs控制器

vm.retrieve = function () {

    if (vm.selectedDate !== null) {
        var day = vm.selectedDate.getDate();
        var date = (day + "" + (vm.selectedDate.getMonth() + 1) + "" + (vm.selectedDate.getFullYear()));

        ClaimService.getClaimsByDate(date)
            .then(function (response) { if (response) activate(); })

        vm.clear();
    }
}

这是发送get请求的angular函数:

function getClaimsByDate(date) { //Angularjs service

    return $http.get("odata/Claims(" + date + ")")
        .then(function (data) {

            return true;
        });
}

第一期: OData GET方法必须具有参数的“int”。我尝试使用string和DateTime,但是当我使用'string'作为参数发送数据时,除非将数据作为整数发送,否则它将根本找不到控制器。如果我将日期发送为UTC,则会收到错误potentially dangerous并且不会执行。

第二期: 将日期发送为int,如果日期以ddMMyyyy格式发送为30112015,则会找到控制器,但找不到111201501112015。看起来它只识别大于10的日期。除此之外,其他一切工作正常,包括[EnableQuery]的常规GET方法。

1 个答案:

答案 0 :(得分:0)

我发现这个SO答案 Web API and OData- Pass Multiple Parameters帮助了我。我最终创建了一个以key为参数的函数。然后,这只是从Angular调用函数的问题。