Session
変数が存在するかどうかを確認しようとしていますが、エラーが発生します。
System.NullReferenceException:オブジェクト参照がオブジェクトのインスタンスに設定されていません。
コード:
// Check if the "company_path" exists in the Session context
if (System.Web.HttpContext.Current.Session["company_path"].ToString() != null)
{
// Session exists, set it
company_path = System.Web.HttpContext.Current.Session["company_path"].ToString();
}
else
{
// Session doesn't exist, set it to the default
company_path = "/reflex/SMD";
}
これは、Session
名「company_path」が存在しないため、検出できません。
Session ["company_path"]がnullかどうかを確認する場合は、ToString()を使用しないでください。 As if Session["company_path"] is null then Session["company_path"].ToString() will give you exception.
変更
if (System.Web.HttpContext.Current.Session["company_path"].ToString() != null)
{
company_path = System.Web.HttpContext.Current.Session["company_path"].ToString();
}
else
{
company_path = "/reflex/SMD";
}
To
if (System.Web.HttpContext.Current.Session["company_path"]!= null)
{
company_path = System.Web.HttpContext.Current.Session["company_path"].ToString();
}
else
{
company_path = "/reflex/SMD";
}
これは、null条件付き?.
とnull-coalesce ??
を使用して、最新バージョンの.NETで1つのライナーとして解決できます。
// Check if the "company_path" exists in the Session context
company_path = System.Web.HttpContext.Current.Session["company_path"]?.ToString() ?? "/reflex/SMD";
リンク:
https://docs.Microsoft.com/en-us/dotnet/csharp/language-reference/operators/null-coalescing-operatorhttps://docs.Microsoft.com/ en-us/dotnet/csharp/language-reference/operators/null-conditional-operators
Azureにデプロイする場合(2017年8月現在)、セッションキー配列が入力されているかどうかも確認すると便利です。例:
Session.Keys.Count > 0 && Session["company_path"]!= null