2016-11-10 15 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

私はまたのComplexTypeとしてGlobalStatsを登録してみました。まだ運がありません。

EDIT#2

以下、正確なエラーメッセージである:

System.Web.OData.dll で発生しなかったがタイプ 'のSystem.InvalidOperationException' の例外ユーザーコードで処理されます。

追加情報:パステンプレート 'GetGlobalStats'アクションの 'Company.Functions.GlobalStats'は、 コントローラ 'Global'は有効なODataパステンプレートではありません。 「Company.Functions.GlobalStats」セグメントのリソースが ではありません。

+0

*ネームスペースで呼び出すことを*したいですか? – TomDoesCode

+0

@TomDoesCodeあまりにも明白な理由で私が名前空間で動作させることができないのであれば、私は思っています。 – Unlimited071

+0

名前空間で動作するようにしてみましょうが、名前空間がなくても動作させるようにしようとしていますが、その間に 'Company.Functions.'を' ODataRoute '属性と' Function'関数のパラメータから 'Functions.'関数を呼び出してネームスペースなしで動作させます – TomDoesCode

答えて

0
  1. 結合していない機能を定義します

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

    config.MapODataServiceRoute("ODataRoute", "odata", model); 
    
  2. は、コントローラのメソッドのためのルート属性を定義します。あなたのODATAルート地図

    modelBuilder.Function("Company.Functions.GlobalStats").Returns<GlobalStats>(); 
    
  3. http://host/odata/Company.Functions.GlobalStats

+0

ありがとうございますが、これは名前空間が"グローバルに "定義されていない場合に機能します。 – Unlimited071

0

でそれを呼び出しコール結合していない機能のみに関係なく、名前空間、サービスルートの後に結合していない関数名を使用する必要があります。

+0

あなたは何を意味するのか分かりません。いくつかのコードで説明してください。私が理解しているのは、 'Function.GlobalStats'を削除し、' GlobalStats'だけにしておくことです。そうだとすれば、私はすでに試してみましたが、うまくいきませんでした – Unlimited071

関連する問題