問題タブ [asp.net-web-api-odata]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
380 参照

c# - プロパティのユーザー セキュリティごとの WebApi OData

一部のユーザーのみがアクセスできるようにする必要があるデータを持つエンティティがいくつかあります。

たとえば、からのBar.Secretみアクセスできる必要がありますが、 からはアクセスできUserAませんUserB。私はこのようなことができます:

それに加えて、実装が悪いです。このコントローラーは対象外です。

で呼び出すことができ/odata/Foos?$expand=Bars、それから を表示できますBar.Secret。そのクエリは完全に合法であり、必要でもあるため、単に無効$expandにすることはできません。FooUserA

要求されたエンティティを含むいくつかの述語に対して OData でクエリを検証する方法はありますか。

何かのようなもの

0 投票する
0 に答える
241 参照

c# - Abstract Generic ODataController が原因で「HTTP リソースが見つかりませんでした」

私はこの基本ODataControllerを持っています

そして、この派生コントローラー

ちゃんと打て.../odata/foos(1)ます。しかし.../odata/foos、このエラーを出してください:

仮想にしてからGet()、派生コントローラーでオーバーライドする必要があります。このような:

Get()ベースコントローラーで動作しないのはなぜGet(1)ですか?

0 投票する
1 に答える
227 参照

entity-framework - エンティティ クラスで 2 つの自己参照を持つ方法

Fooそれ自体への 2 つのオプションの参照を持つことができる があります:ParentIdRootId.

1 つあれば問題なく動作しますが、2 つ目の自己参照を導入するとエラーが発生します。

タイプ「Model.Foo」と「Model.Foo」の間の関連付けのプリンシパル エンドを特定できません。この関連付けのプリンシパル エンドは、リレーションシップ fluent API またはデータ アノテーションを使用して明示的に構成する必要があります。

0 投票する
1 に答える
606 参照

asp.net-web-api - 計算値を OData の結果に追加する

ユーザーがエンティティへの読み取りまたは書き込みアクセス権を持っているかどうかに関係なく、データ結果に情報を追加しようとしています。

私がこのエンティティを持っているとしましょう:

ユーザー ID を保持する場所AccessRightsと、読み取り/書き込みアクセス権があるかどうか。

現在、私は$expandAccessRights だけで、ユーザーがフロントエンドで読み取り/書き込みアクセス権を持っているかどうかを計算します。ただし、この計算されたプロパティを結果に追加したいと思います。

json の結果の例:

これを行うことは可能ですか?HasRead/WriteAccessモデルには存在せず、存在すべきでもないことに注意してください。

0 投票する
1 に答える
1260 参照

c# - oData フィルターが MongoDB と Web API のナビゲーション プロパティで機能しない

コントローラは次のようになります

MongoDb リポジトリでは、コレクションの AsQueryable を返しています。

MongoDB ドキュメントは次のようになります

ID は ObjectId.GenerateNewId().ToString() を使用して生成されたため、文字列として格納されます。

Node と NodeGroup は純粋な POCO です

問題

のような oData URI

正常に動作します。

しかし、Navigation プロパティでフィルタリングしようとすると

それは私に例外を与えます

メッセージ: "式のシリアル化情報を特定できません: ConditionalExpression.",

0 投票する
2 に答える
1368 参照

asp.net - ASP.NET Web API OData サービスで投稿不足を防ぐ方法は?

非常に単純な OData v4 コントローラーを作成しました。Petコントローラーには基本的に、次のエンティティの Entity Framework に基づく CRUD メソッドが含まれています。

ここで重要なことPet.Ageは、必須プロパティが null 非許容であることです。

コントローラー自体は次のとおりです (Postメソッドのみが示されています)。

そして、これは私のWebApiConfigコントローラー構成です:

データベースに新しいものを作成したい場合は、次のようなリクエストPetを発行します。POST

ただし、JSON 要求ペイロードでプロパティを単純に省略できるAgeため、JSON デシリアライザーは既定値の を使用しますが0400 Bad Request代わりにステータスを返す必要があります。この問題はアンダーポスティングと呼ばれます。

通常の WebApi コントローラーを使用すると、簡単に解決できます (解決策については、こちらで説明しています)。を作成し、コントローラーが実際のエンティティPetViewModelの代わりに を受け入れるようにするだけです。PetViewModelPet

次に、コントローラーでエンティティに変換PetViewModelPet、通常どおりデータベースに保存します。

残念ながら、このアプローチは OData コントローラーでは機能しません。メソッドをの代わりにPostacceptに変更すると、次のエラーが表示されます。PetViewModelPet

System.Net.Http.UnsupportedMediaTypeException: MediaTypeFormatter を使用して、メディア タイプ 'application/json' のコンテンツからタイプ 'PetViewModel' のオブジェクトを読み取ることができません。

System.Net.Http.HttpContentExtensions.ReadAsAsync [T] (HttpContent コンテンツ、型の種類、IEnumerable'1 フォーマッター、IFormatterLogger formatterLogger、CancellationToken cancelToken) で

System.Net.Http.HttpContentExtensions.ReadAsAsync (HttpContent コンテンツ、型の種類、IEnumerable'1 フォーマッター、IFormatterLogger formatterLogger、CancellationToken cancelToken) で

System.Web.Http.ModelBinding.FormatterParameterBinding.ReadContentAsync (HttpRequestMessage 要求、Type タイプ、IEnumerable`1 フォーマッター、IFormatterLogger formatterLogger、CancellationToken cancelToken) で

では、OData コントローラーを使用するときに過少投稿を防ぐ方法はありますか?