私はSOを含めてウェブを検索していますが、問題に対する最良の解決策を見つけることができませんでした。これらの2つの変数(ユーザーID、ユーザータイプ)は、コントローラthrought使用されているMVCでログインセッション変数を管理する方法
int userid = (int)System.Web.HttpContext.Current.Session["UserID"]; string usertype = (string)System.Web.HttpContext.Current.Session["UserType"];
:私は約15のコントローラを持っているMVCプロジェクトを引き継いでいると、各コントローラクラスは、これらの2行で始まりますアクションメソッド。
これを避けるにはどうすればよいでしょうか?私が見つけた2つのオプションは、SessionEndAttributeクラスを作成してそれを各コントローラに追加するか、セッションチェックでベースコントローラクラスを作成し、すべてのコントローラクラスをBaseControllerクラスから継承させることでした。
これは私がしばらくのやっていることで、これが正しい道であるなら、私に知らせて
コントローラー:
[SessionExpire]
public class WordShareController : Controller
{
int userid = 0;
string usertype = string.Empty;
public WordShareController() : this(new SessionManagement())
{
}
public WordShareController(SessionManagement objSession)
{
userid = objSession.UserId;
usertype = objSession.UserType;
}
SessionManagement.cs
public class SessionManagement
{
private int _userId = 0;
private String _userType, _userName, _webName = string.Empty;
public SessionManagement()
{
if (HttpContext.Current.Session["UserID"] != null)
{
_userId = Convert.ToInt32(HttpContext.Current.Session["UserID"]);
_userType = Convert.ToString(HttpContext.Current.Session["UserType"]);
_userName = Convert.ToString(HttpContext.Current.Session["UserName"]);
_webName = Convert.ToString(HttpContext.Current.Session["WebName"]);
}
}
public int UserId
{
get
{
return _userId;
}
}
public string UserType
{
get
{
return _userType;
}
}
public string UserName
{
get
{
return _userName;
}
}
public string WebName
{
get
{
return _webName;
}
}
}
SessionExpireAttribute.cs
public class SessionExpireAttribute : ActionFilterAttribute
{
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
HttpSessionStateBase session = filterContext.HttpContext.Session;
// If the browser session or authentication session has expired...
if (session.IsNewSession || session["LoginUser"] == null)
{
if (filterContext.HttpContext.Request.IsAjaxRequest())
{
// For AJAX requests, return result as a simple string,
// and inform calling JavaScript code that a user should be redirected.
JsonResult result = new JsonResult()
{
Data = "SessionTimeout",
ContentType = "text/html"
};
filterContext.Result = result;
}
else
{
// For round-trip requests,
filterContext.Result = new RedirectToRouteResult(
new RouteValueDictionary {
{ "Controller", "User" },
{ "Action", "Login" }
});
}
}
base.OnActionExecuting(filterContext);
}
}
のように、この認証クラスを登録することです行く正しい道?誰でも ? –