問題タブ [odata-v4]
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.
odata - 別の JSON オブジェクト内の JSON オブジェクトの Odata フィルター
以下のような Json オブジェクトを返す odata サービスがあり、国でデータをフィルター処理したいと考えています。出来ますか?
「service url ? $filter= Gender eq male」を使用して性別でフィルタリングできることは知っていますが、国でフィルタリングするにはどうすればよいですか?
asp.net-web-api - 計算値を OData の結果に追加する
ユーザーがエンティティへの読み取りまたは書き込みアクセス権を持っているかどうかに関係なく、データ結果に情報を追加しようとしています。
私がこのエンティティを持っているとしましょう:
ユーザー ID を保持する場所AccessRights
と、読み取り/書き込みアクセス権があるかどうか。
現在、私は$expand
AccessRights だけで、ユーザーがフロントエンドで読み取り/書き込みアクセス権を持っているかどうかを計算します。ただし、この計算されたプロパティを結果に追加したいと思います。
json の結果の例:
これを行うことは可能ですか?HasRead/WriteAccess
モデルには存在せず、存在すべきでもないことに注意してください。
c# - Web API OData (OData クライアント v4) キーのスラッシュ
OData Web API を作成しましたが、主キーにスラッシュが含まれているデータの検索に問題があります。
この URL は期待どおりにデータを返します:
/api/SalesOrders('12345')
ただし、キーにスラッシュが含まれているものは失敗します:
/api/SalesOrders('12345/1')
エンコードされている場合でも:
/api/SalesOrders('12345%2F1')
表示されたエラー (以下を参照) では、最後のスラッシュがクエリ文字列ではなく URL の一部であるため、予想どおりバックスラッシュに変換されているように見えます。
代わりに、スラッシュがクエリ文字列にある次の URL を使用すると、データが正しく返されます:
/api/SalesOrders?$filter=SalesOrderNumber eq 12345/1
自分で URL を生成していた場合、これは大きな問題にはなりません。
ただし、OData v4 Client Code Generatorを使用しています
したがって、コード内の呼び出しは実際には次のようになります。
var salesOrder = erpClient.SalesOrders.ByKey(worksOrder.SalesOrderNumber).GetValue();
これにより、クエリ文字列の前にスラッシュを含む URL が生成されるため、失敗します。
- これは OData v4 クライアントの既知の問題ですか?
- 主キー タイプの呼び出しでクエリ文字列の使用を強制する設定はありますか?
次のようにスラッシュをクエリ文字列に強制することで、これを回避できます。
var salesOrder = erpClient.SalesOrders.Where(so => so.SalesOrderNumber == "12345/1" && so.SalesOrderNumber == so.SalesOrderNumber).FirstOrDefault();
これにより、スラッシュがクエリ文字列に強制的に挿入されます:
/api/SalesOrders?$filter=SalesOrderNumber eq '450993/1' and SalesOrderNumber eq SalesOrderNumber
これは面倒です。OData v4 クライアントを使用しているアプリがいくつかあるため、OData v4 クライアントから離れることは避けたいと思います。
この作業をもう少しきれいにするために他にできることはありますか?
脚注:
このブログのプロセスに従って特殊文字を処理しましたが、スラッシュの処理方法に関するアドバイスは含まれていません。
c# - Asp.Net WebApi OData v4 - 関連エンティティと共にエンティティを保存する
次のエンティティを検討してください
上記のコードに従って、サプライヤー エンティティは 0 個以上の製品を持つことができます。上記のエンティティでは、ID は Entity Framework によって自動生成されます。
Odata V4 クライアント コード ジェネレーターを使用しています。
クライアントコード:
サプライヤー管理者:
製品コントローラー:
変更を保存すると、次のエラー メッセージが表示されます。
INSERT ステートメントが FOREIGN KEY 制約と競合しました。
エラーの理由は、Product
エンティティがSupplierId
データベースで生成されたキーをまだ持っていないためです。
では、レコードを保存しながらエンティティに追加SupplierId
するにはどうすればよいでしょうか? Product
誰でもこの問題を解決するのを手伝ってもらえますか?
asp.net - サイトにグローバル AuthorizeAttribute がある場合、ASP.NET は OData $metadata への匿名アクセスを許可します
WebApiConfig ファイルに次の ASP.NET OData サイトがあります。
これにより、コントローラーを呼び出す前に、すべての呼び出し元に認証が強制されます。
残念ながら、これにより、ユーザー認証で「$metadata」URL にアクセスすることも強制されます。
「$ metadata」URLへの匿名アクセスを許可しながら、すべてのコントローラーアクセスに対してグローバルに認証を強制する必要があります。
java - Apache Olingo V4 Java API で文字列列挙を使用する方法
CsdlEnumType
データ作成中に Apaches Olingo V4 Java APIを使用する方法がわかりません。
可能な限り少ないコードでこれまでに行ったことは次のとおりです。
1) 私のEdmODataProvider.java
クラスでは、エンティティ タイプを作成しFQDN
、列挙型エンティティをプロパティに追加しました。CsdlEnumType
さらに、スキーマ プロバイダー クラスでをインスタンス化しました。部分で数字のみを使用している場合setValue()
、期待される結果が得られるため、これはうまくいくと思います。:
2) 私のデータ プロバイダー クラスでは、次のようなエンティティを作成しています。
エンティティを呼び出そうとすると、最終的にエラーが発生します:
私の$metadata
内容:
問題は、属性を文字列として追加しているパート 2) にあると思いますDISPNAME
。この問題を解決する方法はありますか?