NancyFXで最初のアプリケーションを作成します。 パート3。 ナンシーモジュール

NanacyFXの以前の記事では、NancyFXで最初のアプリケーションを作成しました。 パート2 組み込みのNancyFX TinyIoCに出会い、その使用方法を学びました。 この記事では、Nancyモジュールを詳しく見ていきます。



したがって、これまで見てきたように、ナンシーアプリケーションとの対話は、httpセッションの典型的なシナリオです。 つまり ユーザーがリクエストをサーバーに送信し、サーバーがリクエストを受信し、アプリケーションがリクエストを処理し、応答を生成し、サーバーがこの応答をユーザーに返します。 次に、この一連のアクションがナンシープロジェクトにどのように適用されるかを詳しく見てみましょう。



ナンシーのモジュールは、httpメソッド+処理メソッドパターン+追加条件を含むルートを定義します







ナンシーのモジュールは、ルートを定義することを主な目的とするコンテナクラスです。 さらに、このクラスには多くの便利なプロパティと拡張メソッドが含まれています。 NancyFXで最初のアプリケーションを作成する最初の記事では、以下に示すNancyモジュールを作成しました。



画像



Getメソッドを使用して、アプリケーションのルートを指すパターンのルートを持つモジュールを定義しました。 次に、返信応答が定義されました。 ここで、Nancyが選択するルートを決定する方法と、http要求がnancy.requestオブジェクトにどのようにマップされるかを見てみましょう。







httpリクエストの最初の行は、Method、Path、Query、およびUrlプロパティにマップされます。 リクエストヘッダーパラメーターは、Cookies、Headers、およびSessionプロパティにマップされます。 リクエスト本文は、プロパティBody、Files、Formにマップされます。 したがって、図3のリクエストでは、「/ orders」パターンのPostメソッドが定義されます。 そのため、ナンシーが特定のルートで使用する方法を選択するいくつかのルールがあります。



そのため、同じルートにアクセスすると、アプリケーションがWebAPIまたは最初の記事で作成したHello Worldページにリダイレクトするように、このようなモジュールを作成しましょう。 そして、ナンシーの最初のアプリケーションで、2つの同一のルート「/ client」を定義する新しいRouteModuleモジュールを作成します。 ルートコードは次のようになります



using Nancy; namespace NancyFxApplication { public class RouteModule : NancyModule { public RouteModule() { Get["/client"] = p => "Hello API user!"; Get["/client"] = p => View["Index.html"]; } } }
      
      







アプリケーションを起動して/クライアントルートを呼び出すと、次のページが表示されます。







リクエストにFiddlerを使用すると、次の画像が表示されます







ご覧のように、ルールに従って、デフォルトでは最後の方法が使用されます。 次に、メソッドを変更して、ルートを呼び出すときにFiddlerがWebAPIを呼び出すようにします。 これを行うには、クラスコードを次のように変更します。



 using System; using Nancy; namespace NancyFxApplication { public class RouteModule : NancyModule { private readonly Func<Request, bool> _isNotApiClient = request => !request.Headers.UserAgent.Equals("Fiddler"); public RouteModule() { Get["/client"] = p => "Hello API user!"; Get["/client", context => _isNotApiClient(context.Request)] = p => View["Index.html"]; } } }
      
      







アプリケーションを起動したら、ブラウザを使用して呼び出します。 同じHello Worldページが返されます。 ただし、Fiddlerを使用して同じルートが呼び出された場合、次のように表示されます。







フィルター関数ではクライアントの名前を確認するため、アプリケーションは最初のルートを使用します。



結論として、httpリクエストがnancy.requestオブジェクトにマップされるのと同じ方法で、nancy.responseオブジェクトがhttpレスポンスにマップされることを追加したいと思います。







応答ヘッダーの最初の行は、StatusCodeプロパティにマップされます。 http要求の場合と同様に、http応答のヘッダーはContentType、Cookies、Headersプロパティにマップされ、応答本文はContentプロパティにマップされます。



そして、私は助けることができませんが、次の記事の発表を行います。 その中で、私たちはナンシーのモジュールでの作業の複雑さを分析し続けます。

この作品についてのコメントや質問をお待ちしています。



All Articles