2014-04-03 48 views
0

我是odata的新手,並嘗試一些東西。我想提供一個帶有2個DateTime類型參數的方法。我試圖通過網址發送請求,但沒有奏效。有人可以給我任何建議,我做錯了什麼?Odata類型轉換URL

[HttpGet] 
public IQueryable<TestData> TestMethod([FromUri] DateTime dateFrom, [FromUri] DateTime dateTo) 
{ 
    ... 
} 

我的要求:數據/ ManagementReporting/TestMethod的dateFrom = datetime'2014-02-01' & dateTo = datetime'2014-04-01'

回答

0

請求是URL是錯誤的? 如果你要調用的函數並傳遞參數,請嘗試:

數據/ ManagementReporting/TestMethod的(dataFrom = '2014年2月1日',dataTo = '2014年4月1日')

1

您可以參考http://www.asp.net/web-api/overview/odata-support-in-aspnet-web-api/creating-an-odata-endpoint在Webapi中構建OData端點。 在你的情況下,首先,你可以在EdmModel通過定義TestMethod爲一個未綁定功能:

ODataConventionModelBuilder builder = new ODataConventionModelBuilder(); 
var functionConfiguration = builder.Function("TestMethod"); 
functionConfiguration.Parameter<DateTime>("dateFrom"); 
functionConfiguration.Parameter<DateTime>("dateTo"); 

,然後嘗試查詢作爲瑪雅說。您也可以參考OData Protocol以查找有關如何在OData中調用函數的更多信息。 否則,http://www.odata.org是一個很棒的網站,如果你想了解更多關於odata的信息。

0

如果您使用的是默認微風的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); 
    }