2016-11-10 47 views
1

以下OData配置引發錯誤消息:「...資源未找到段...」。OData v4資源未找到段

和控制器:

public class GlobalController : CompanyController 
{ 
    [HttpGet] 
    [ODataRoute("Company.Functions.GlobalStats")] 
    public async Task<IHttpActionResult> GetGlobalStats() 
    { 
     var stats = await Company.GlobalStats.GetAsync(); 
     return Ok(stats); 
    } 
} 

的想法是有類似以下端點:

http://api.company.com/odata/Company.Functions.GlobalStats

請幫我搞清楚什麼我這個配置中缺少。

EDIT#1

我還試圖註冊GlobalStats作爲的ComplexType。仍然沒有運氣。

EDIT#2

以下是確切的錯誤消息:

類型 'System.InvalidOperationException' 的異常出現在System.Web.OData.dll 但沒有在用戶代碼中處理。

附加信息:路徑模板 'Company.Functions.GlobalStats'對'GetGlobalStats'的操作在 控制器'Global'不是有效的OData路徑模板。資源不是 找到段「Company.Functions.GlobalStats」。

+0

您是否希望*用名稱空間調用它? – TomDoesCode

+0

@TomDoesCode是的,我認爲它更乾淨,但如果出於某些不明確的原因,我無法使其與命名空間一起工作,那麼我就不會再有選擇了。 – Unlimited071

+0

我將再次嘗試使它與名稱空間一起工作,但爲了讓它在沒有名稱空間的情況下工作,但同時,您應該能夠從'ODataRoute的參數中刪除'Company.Functions.' '屬性和Function.'函數調用的函數來使它在沒有命名空間的情況下工作 – TomDoesCode

回答

0
  1. 定義未綁定功能:

    modelBuilder.Function("Company.Functions.GlobalStats").Returns<GlobalStats>(); 
    
  2. 地圖您的OData路線:

    config.MapODataServiceRoute("ODataRoute", "odata", model); 
    
  3. 定義一個路由屬性,在控制器的方法:

    [HttpGet] 
    [ODataRoute("Company.Functions.GlobalStats")] 
    public async Task<IHttpActionResult> GetGlobalStats() 
    { 
        // your code 
    } 
    
  4. http://host/odata/Company.Functions.GlobalStats

+0

謝謝,但是這個工作如果命名空間沒有被定義爲「全局」,我正在做。 – Unlimited071

0

調用未函數調用它應該只使用未綁定的函數名業務根後,無論是命名空間。

+0

我不確定你的意思。你能用一些代碼來解釋一下嗎?我所知道的是刪除'Function.GlobalStats'並且只保留'GlobalStats'。如果是這種情況,那麼我已經嘗試過了,它不起作用 – Unlimited071