我是odata的新手,目前正在尝试一些事情。我想提供一个带有 2 个日期时间类型参数的方法。我尝试通过 url 发送请求,但它不起作用。有人可以给我任何建议我做错了什么吗?
[HttpGet]
public IQueryable<TestData> TestMethod([FromUri] DateTime dateFrom, [FromUri] DateTime dateTo)
{
...
}
我的请求:数据/管理报告/测试方法?dateFrom=datetime'2014-02-01'&dateTo=datetime'2014-04-01'
可以引用http://www.asp.net/web-api/overview/odata-support-in-aspnet-web-api/creating-an-odata-endpoint
在 Webapi 中生成 OData 终结点。在您的情况下,首先,您可以通过以下方式将TestMethod
定义为 EdmModel 中的未绑定函数:
ODataConventionModelBuilder builder = new ODataConventionModelBuilder();
var functionConfiguration = builder.Function("TestMethod");
functionConfiguration.Parameter<DateTime>("dateFrom");
functionConfiguration.Parameter<DateTime>("dateTo");
然后,按照玛雅所说尝试查询。还可以参考 OData 协议来查找有关如何在 OData 中调用函数的详细信息。否则,如果您想了解更多关于 odata 的信息,http://www.odata.org 是一个很棒的网站。
请求是URL是错误的。如果要调用函数并传递参数,请尝试:
data/ManagementReporting/TestMethod(dataFrom='2014-02-01',dataTo='2014-04-01')
如果您使用的是默认的 breeze WebApi/WebApi2 控制器,并且要将任意参数传递给服务器,则可以执行以下操作:
-
在客户端上
var q = EntityQuery.from("EmployeesFilteredByCountryAndBirthdate") .withParameters({ birthDate: "1/1/1960", country: "USA" }); em.executeQuery(q).then(function (data) { ... }
-
在服务器上
[HttpGet] public IQueryable<Employee> EmployeesFilteredByCountryAndBirthdate(DateTime birthDate, string country) { return ContextProvider.Context.Employees.Where( emp => emp.BirthDate >= birthDate && emp.Country == country); }