3

MVC3アプリケーションをいくつかのナンシーモジュールと組み合わせようとしています。私のアプリケーションでは、MVC3コントローラーでセッション変数を設定してから、Nancyモジュールでその変数を読み取ろうとしています。Nancyコントローラーで変数を読み取ろうとすると、Sessionオブジェクトがnullになります。

これが私のMVC3コントローラー、ナンシーモジュール、ルートweb.configの要点です。

https://gist.github.com/3105219

現在のhttpcontextにぶら下がっている他のすべての(ほとんどの)オブジェクトはnullではなく、アプリケーションのMVC3セクションで比較すると「正常」に見えます。

編集:さらにテストすると、生のNancyアプリケーションでASP.NETセッションにアクセスできないことがわかりました。このページの下部にある「最初のNancyアプリケーションの作成」セクションの手順を使用してアプリケーションを作成しました。

https://github.com/NancyFx/Nancy/wiki/Introduction

これが単純なNancyアプリケーションのweb.configです。

https://gist.github.com/3105583

4

3 に答える 3

3

BootStrapperNancy でセッション サービスを提供するには、 を作成する必要があります。セッション サービスはISessionインターフェイスによって提供されます。Nancy には、いくつかのデフォルトの実装が付属しています:NullSessionProviderSession. デフォルトは だと思いますNullSessionProvider。もう 1 つの実装では、処理中のデータを保存し、Cookie を使用しません。Cookie ベースのセッションを作成するには、以下のようにブートストラップを作成する必要があります。

public class Bootstrapper : DefaultNancyBootstrapper
{
    protected override void ApplicationStartup(TinyIoCContainer container, IPipelines  pipelines)
    {
      CookieBasedSessions.Enable(pipelines);
    }
}

参考文献 http://blog.csainty.com/

編集:

私の理解では、ナンシーは独自のコンテキスト クラスを使用して、リクエスト、セッション、キャッシュなどを提供しています。これらのサービスを提供するのに役立つのはブートストラップです。Nancy でデフォルトとして HttpContext や HttpSession などの ASP.NET オブジェクトをそのまま使用できるかどうかはわかりません。

于 2012-07-13T17:35:43.823 に答える
2

prakash と AdrieanKhisbe の回答をフォローアップします (それは私にとってはうまくいきましたが、方法を理解する時間がありました)。

前の回答で述べたとおり、その内容を正確に含む新しい .cs ファイルを作成します。

public class NancyAspHttpRequestHandler : NancyHttpRequestHandler, IRequiresSessionState {

}

これは空のクラスですが、 (Http セッション状態)NancyHttpRequestHandlerとの間の両方を継承します。IRequiresSessionState

次に、Web.config で、Nancy.Hosting.Aspnet.NancyHttpRequestHandlerをこの新しいものに置き換えます。NancyAspHttpRequestHandler

<system.webServer>
    <handlers>
      <!--add name="Nancy" verb="*" type="Nancy.Hosting.Aspnet.NancyHttpRequestHandler" path="*" /-->
      <add name="Nancy" verb="*" type="your_name_space.NancyAspHttpRequestHandler" path="*" />
    </handlers>
</system.webServer>

今、HttpContext.Current.Sessionもう null ではありません。

于 2016-11-02T16:20:21.420 に答える