問題タブ [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.
c# - プロパティのユーザー セキュリティごとの WebApi OData
一部のユーザーのみがアクセスできるようにする必要があるデータを持つエンティティがいくつかあります。
たとえば、からのBar.Secret
みアクセスできる必要がありますが、 からはアクセスできUserA
ませんUserB
。私はこのようなことができます:
それに加えて、実装が悪いです。このコントローラーは対象外です。
で呼び出すことができ/odata/Foos?$expand=Bars
、それから を表示できますBar.Secret
。そのクエリは完全に合法であり、必要でもあるため、単に無効$expand
にすることはできません。Foo
UserA
要求されたエンティティを含むいくつかの述語に対して OData でクエリを検証する方法はありますか。
何かのようなもの
c# - Abstract Generic ODataController が原因で「HTTP リソースが見つかりませんでした」
私はこの基本ODataControllerを持っています
そして、この派生コントローラー
ちゃんと打て.../odata/foos(1)
ます。しかし.../odata/foos
、このエラーを出してください:
仮想にしてからGet()
、派生コントローラーでオーバーライドする必要があります。このような:
Get()
ベースコントローラーで動作しないのはなぜGet(1)
ですか?
entity-framework - エンティティ クラスで 2 つの自己参照を持つ方法
Foo
それ自体への 2 つのオプションの参照を持つことができる があります:ParentId
とRootId
.
1 つあれば問題なく動作しますが、2 つ目の自己参照を導入するとエラーが発生します。
タイプ「Model.Foo」と「Model.Foo」の間の関連付けのプリンシパル エンドを特定できません。この関連付けのプリンシパル エンドは、リレーションシップ fluent API またはデータ アノテーションを使用して明示的に構成する必要があります。
asp.net-web-api - 計算値を OData の結果に追加する
ユーザーがエンティティへの読み取りまたは書き込みアクセス権を持っているかどうかに関係なく、データ結果に情報を追加しようとしています。
私がこのエンティティを持っているとしましょう:
ユーザー ID を保持する場所AccessRights
と、読み取り/書き込みアクセス権があるかどうか。
現在、私は$expand
AccessRights だけで、ユーザーがフロントエンドで読み取り/書き込みアクセス権を持っているかどうかを計算します。ただし、この計算されたプロパティを結果に追加したいと思います。
json の結果の例:
これを行うことは可能ですか?HasRead/WriteAccess
モデルには存在せず、存在すべきでもないことに注意してください。
c# - oData フィルターが MongoDB と Web API のナビゲーション プロパティで機能しない
コントローラは次のようになります
MongoDb リポジトリでは、コレクションの AsQueryable を返しています。
MongoDB ドキュメントは次のようになります
ID は ObjectId.GenerateNewId().ToString() を使用して生成されたため、文字列として格納されます。
Node と NodeGroup は純粋な POCO です
問題
のような oData URI
正常に動作します。
しかし、Navigation プロパティでフィルタリングしようとすると
それは私に例外を与えます
メッセージ: "式のシリアル化情報を特定できません: ConditionalExpression.",
asp.net - ASP.NET Web API OData サービスで投稿不足を防ぐ方法は?
非常に単純な OData v4 コントローラーを作成しました。Pet
コントローラーには基本的に、次のエンティティの Entity Framework に基づく CRUD メソッドが含まれています。
ここで重要なことPet.Age
は、必須プロパティが null 非許容であることです。
コントローラー自体は次のとおりです (Post
メソッドのみが示されています)。
そして、これは私のWebApiConfig
コントローラー構成です:
データベースに新しいものを作成したい場合は、次のようなリクエストPet
を発行します。POST
ただし、JSON 要求ペイロードでプロパティを単純に省略できるAge
ため、JSON デシリアライザーは既定値の を使用しますが0
、400 Bad Request
代わりにステータスを返す必要があります。この問題はアンダーポスティングと呼ばれます。
通常の WebApi コントローラーを使用すると、簡単に解決できます (解決策については、こちらで説明しています)。を作成し、コントローラーが実際のエンティティPetViewModel
の代わりに を受け入れるようにするだけです。PetViewModel
Pet
次に、コントローラーでエンティティに変換PetViewModel
しPet
、通常どおりデータベースに保存します。
残念ながら、このアプローチは OData コントローラーでは機能しません。メソッドをの代わりにPost
acceptに変更すると、次のエラーが表示されます。PetViewModel
Pet
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 コントローラーを使用するときに過少投稿を防ぐ方法はありますか?