6

ノックアウトと ASP.NET Web API を使用したクライアントの検証に関する質問があります。ビューを完全に静的にしたい (ルート index.html/cshtml を除外している可能性があります) と、js でデータ注釈属性ルールを手作業で記述して繰り返したくありません。

私のコンテキストは、Durandal の中規模 (ビジネス レイヤーで 20 ~ 40 エンティティ) のアプリです。

私が見つけた失敗した/不適切な方法とその説明:

1. Breeze.js を使用する

一見したところ、Breeze.js は私が必要としているものとまったく同じように見えます。仕組み: /Metadata リンクを介して json を共有し、1 つをknockout.valudate プラグインにマップします。すべて問題ありませんが、エンティティを共有するのは奇妙に見えます (Nunit や複雑なサーバー ロジックなどは忘れる必要があります...そして、データ コンテキストを公開するのは恐ろしいことです: 安全ではなく、安全ではありません!)。JObject引数を使用してメソッドを保存することも、私には奇妙に見えます。

2. Web API からデータを取得し、Breeze または Web API からメタデータを取得し (方法は?)、クライアントで変換します。

これに近い唯一の解決策は、https://github.com/johnculviner/FluentKnockoutHelpersです。cshtml ですべてのメタデータ (それほど重要ではありませんが、私の観点からは良くありません) をレンダリングし、knockout.validate にマップします。jsonを介してapiからmatadataを取得し、ノックアウトで提供できる、同様の機能を備えた同様のすぐに使用できるフレームワークがあるのでしょうか?

3. ビルド時に cshtml を html にレンダリングする

複雑なビルドプロセス!

静的 HTML および Web API アプリケーション用の別のソリューションがあるでしょうか?

4

1 に答える 1

1

手始めに、まず 1 つのことについて合意する必要があります。

Breeze を使用してサーバーからデータを取得するのは、JavaScript の経験がない場合、初めて設定するのが難しい場合があります。

いくつかの理由とその課題を克服する方法の例を見るか、不要な読み物を飛ばして、Breeze.js またはクライアント側アプリケーションを使用する場合のセキュリティについて話しましょう。

<!--
    If you think this next section is 'Too Long' : 'Don't Read'
        and are just interested in security, skip down until
        you see 'Why is Breeze.js secure?'
-->

<section role="TL:DR">

Breeze.js のドキュメントは常に更新および改善されていますが、コミュニティとして、 breeze.js の活用方法についてさらに学ぶために改善することができます。ここでは、クライアント側アプリケーションでbreeze.jsをセットアップする方法のヒントといくつかの基本的なシナリオを紹介します -

基本的なシナリオ

  1. Web API コントローラー アクションからデータを取得する -

    Web API ルートを使用するときに独自のメタデータを使用するように Breeze.js を設定できます。

    http://www.breezejs.com/documentation/web-api-routing http://pluralsight.com/training/Courses/TableOfContents/building-single-page-applications-breeze

  2. EF / Breeze.WebApi を使用して Web API コントローラー アクションからデータを取得する

    VS2012/13 で ASP.NET MVC 5 / Web API 2 プロジェクトを使用するように Breeze.js を設定できます。サーバー側の Breeze.WebApi をヘルパーとして利用する方法を確認したい場合は、このリスト内のリンクまたは PluralSite.com などのオンライン教育サイトのリンクを確認してください -

    http://www.breezejs.com/samples

    http://www.pluralsite.com

    サンプルでは、​​現在使用されている Web テクノロジの 85% を使用する方法を見つけることができます。これには、Angular、Durandal、MongoDb、Node、Entity Framework、Require、Knockout、Ruby、Twitter Bootstrap、Backbone などが含まれます。

  3. Breeze の仕組みを学ぶ -

    http://learn.breezejs.com/

  4. 完全に切り離された SPA からサーバーにアクセスする -

    独自のクライアント側データ ライブラリの設定、オブジェクト グラフの作成、または高速ではないマッピング ライブラリの使用に常に時間を費やすのはなぜでしょうか? JavaScript ORM は急速に大流行しています。なぜなら、車輪を再構築し続ける必要があるからです。ブリーズはどうやってそれを行うことができますか?

    http://www.breezejs.com/samples/edmunds

    http://www.breezejs.com/samples/espn

    クライアント側のものをサーバー側の特定のスタックに結び付けることなく、完全に分離された API をクライアント側のテクノロジで使用できる 2 つの優れた例です。

Breeze.js はなぜ安全なのですか?

データの内容や生成方法に関係なく、データを外部に公開しないでください。クライアント側またはサーバー側に、データを返す前にユーザーを適切に認証していないアプリケーションがある場合、クライアント側のテクノロジを見る前に、適切に認証されていることをどのように確認できますか?

saveChanges() でデータを送り返すときはどうですか?

データベースを投稿/更新するためのブラウザーの自由なローミングを提供するアプリを設計する状況はほとんどありません。1つは、変更されたコンテンツが、データの取得と投稿をテストしていた非常に初期の開発サイクルであり、ビジネスレイヤーとそれが許可するもの(おそらく単体テストで検証されたもの)が、データの無制限の読み取り/書き込みを許可するように設定されていた場合です。 .

しかし、ブラウザベースのアプリケーションを本番環境に移行する場合はどうでしょうか?

私は、読み返さず、その文書に署名する準備ができていることを 100% 確信している文書に署名することは決してありません。また、使用しているテクノロジー スタックを考慮して要件が満たされていることを確認せずに、コードを開発環境または QA 環境から本番環境に渡すことは決してありません。ASP.NET MVC とセッションを使用してユーザー情報を保存することがアプリケーションの方向性である場合は、コントローラー アクションを [Authorize] 属性で装飾します。別の形式のセキュリティを使用している場合は、公開するデータの適切なセキュリティ レベルを常に維持する必要があります。

たとえ 99.99% の確率で悪意のないコンテンツを提供するブラウザー ベースのアプリケーションを信頼してはなりません。

于 2013-11-06T07:10:57.000 に答える