我是odata的新手并且正在尝试一些事情。我想提供一个带有2个DateTime参数的方法。我试图通过网址发送请求但它没有工作。有人可以告诉我我做错了什么吗?
[HttpGet]
public IQueryable<TestData> TestMethod([FromUri] DateTime dateFrom, [FromUri] DateTime dateTo)
{
...
}
我的请求:data / ManagementReporting / TestMethod?dateFrom = datetime&#39; 2014-02-01&#39;&amp; dateTo = datetime&#39; 2014-04-01&#39;
答案 0 :(得分:1)
您可以引用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");
然后,尝试Maya所说的查询。您还可以参考OData Protocol以查找有关如何在OData中调用函数的更多信息。 否则,http://www.odata.org是一个很棒的网站,如果你想了解更多有关odata的信息。
答案 1 :(得分:0)
请求是URL错误。 如果要调用该函数并传递参数,请尝试:
数据/ ManagementReporting / TestMethod的(dataFrom = '2014年2月1日',dataTo = '2014年4月1日')
答案 2 :(得分:0)
如果您使用的是默认的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);
}