[英]C#, ASP.NET - Restricting Access to Controller Methods
我正在构建一种排序系统,要求用户先登录才能进入网站的主要订购部分。 例如,我有一个登录控制器(如果用户存在于数据库中)将其ID和UserName分配给会话。
public ActionResult Login(AccountAccess userObj)
{
if (ModelState.IsValid)
{
using (SC_DBEntities db = new SC_DBEntities())
{
var accountObj = db.Users_Account.Where(u => u.Account_UserName.Equals(userObj.Account_UserName)).FirstOrDefault();
if (accountObj != null)
{
var accessObj = db.Users_Access.Where(a => a.Account_ID.Equals(accountObj.Account_ID) && a.Access_Password.Equals(userObj.Access_Password)).FirstOrDefault();
if (accessObj != null)
{
Session["Account_ID"] = accountObj.Account_ID.ToString();
Session["Account_UserName"] = accountObj.Account_UserName.ToString();
return RedirectToAction("Index", "Home");
}
}
}
}
return View(userObj);
}
我要从这里做的是,如果该Session为null,则禁止访问其他方法操作。 因此,例如,如果他们要访问产品页面但未登录,则将其重定向到登录页面。
我对ASP.NET还是很陌生,所以如果有除Sessions之外的更有效的方法来达到这种效果,请告诉我。
您可以不使用ActionFilterAttribute吗?
public class CheckSession: ActionFilterAttribute
{
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
var MySession = HttpContext.Current.Session
if(MySession["Account_ID"] == null || MySession["Account_UserName"]== null)
{
filterContext.Result = new RedirectResult(string.Format("/Account/"));
}
}
}
然后,您所要做的就是将其放入控制器操作中-也可以将其放入控制器中以检查该控制器内部的所有内容:
[CheckSession]
public ActionResult Purchase()
{
....
}
要实现所需的控制器或特定操作,应使用自定义过滤器或属性(在您的情况下为授权属性)。
请看看这个好的教程开始: https : //www.codeproject.com/articles/577776/filters-and-attributes-in-aspnet-mvc
之后,您只需要google: 授权属性asp.net mvc
根据您的评论,您可以将Sessions用于所需的目的。 假设用户登录时,您像上面所做的那样存储并说出用户名及其ID。 如果要确保有人在执行操作之前已登录,则只需检查一下这些Session变量是否为null即可。
连同您的登录控制器代码一起,假设您有购买的控制器操作:
public ActionResult Purchase()
{
//Check to see if these values have been assigned via Login Controller Action
if(Session["Account_ID"] == null || Session["Account_UserName"] == null)
{
//If so, redirect to Controller Action where user can log into.
RedirectToAction("Index", "Account")
}
else
{
//Make Purchase occur.
}
}
身份是一个更新更好的登录系统,但根据我的经验,学习曲线很大。 一旦您对Sessions更加熟悉,我建议您开始研究Identity以用于将来的项目。 会话没有问题,因此出于您的目的,以上代码应适用于您希望用户登录使用的操作。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.