4

ASHXハンドラーを使用していますが、ハンドラーにSession!=nullかどうかを確認してもらいたいです。

if (context.Session["Username"] != null)

そして、私はこの行を指しているこのエラーを受け取ります:

System.NullReferenceException:オブジェクト参照がオブジェクトのインスタンスに設定されていません。

どうしたの?

4

4 に答える 4

11
if (context.Session["Username"] != null)

ハンドラーは実装していますIRequiresSessionStateか?そうしないと、セッションが利用できない場合があります。

MSDNから:

ターゲットHTTPハンドラーがセッション状態値への読み取りおよび書き込みアクセスを必要とすることを指定します。これはマーカーインターフェイスであり、メソッドはありません。

于 2011-04-25T00:47:40.560 に答える
4

このように使用してください。カプセル化オブジェクトの1つがすでにnullになっている可能性があります。

if (context != null)
  if (context.Session != null)
    if (context.Session["Username"] != null) {
      // Do stuff
}
于 2011-04-25T00:48:45.387 に答える
1

ええ、最初にコンテキストがnullでないかどうかを確認してください。

于 2011-04-25T00:48:32.960 に答える
0

.ashxファイルでも同様の問題が発生しました。解決策は、ハンドラーがIReadOnlySessionState(読み取り専用アクセスの場合)またはIRequiresSessionState(読み取り/書き込みアクセスの場合)を実装する必要があることでした。例えば:

public class myModule: IHttpHandler, IRequiresSessionState { ... }

これらのインターフェースは追加のコードを必要としませんが、フレームワークのマーカーとして機能します。

これがお役に立てば幸いです。

ジョナサン

于 2013-04-01T18:25:43.020 に答える