我有这个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
,则会找到控制器,但找不到1112015
或01112015
。看起来它只识别大于10的日期。除此之外,其他一切工作正常,包括[EnableQuery]
的常规GET方法。
答案 0 :(得分:0)
我发现这个SO答案 Web API and OData- Pass Multiple Parameters帮助了我。我最终创建了一个以key
为参数的函数。然后,这只是从Angular调用函数的问题。