Odata类型转换URL

时间:2014-04-03 12:45:55

标签: datetime odata breeze

我是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;

3 个答案:

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