如何阻止用户不访问我的动作在MVC

本文关键字:MVC 我的 访问 何阻止 用户 | 更新日期: 2023-09-27 18:07:42

在我的控制器中有一些方法像这样

 public void Audittrail()
        {
            try
            {
                AUDITTRAIL audittrail = new AUDITTRAIL();
                audittrail.PROGNAME = "PrimaryMarket";
                audittrail.PROGOPTION = Convert.ToString(Session["PROGOPTION"]);
                audittrail.IOTIME = DateTime.Now;
                audittrail.LOGUSER = Convert.ToDecimal(Session["UserId"]);
                audittrail.IPSMSDATE = db.DTTRACKs.Max(z => z.CURRDATE);
                db.AUDITTRAILs.Add(audittrail);
                db.SaveChanges();
            }
            catch (Exception e)
            {
                ExceptionLogging.SendErrorToText(e);
                Response.Redirect("/Account/Error/");
            }
        }

我的控制器名称是Customer如果用户像这样输入urlhttp://localhost:49537/Customer/AudiTrail这个动作被调用,那我怎么才能阻止这一切?使用MVC5

如何阻止用户不访问我的动作在MVC

使用[HttpPost]属性。这样可以防止通过在浏览器中输入url来访问该方法。在你的代码中,你应该用POST来调用它。

对于只返回一些东西的方法使用GET;

你可以写一个动作过滤器,我已经创建了'CheckOwnerActionFilter':

public class CheckOwnerActionFilter : ActionFilterAttribute, IActionFilter
 {    
   AppDbContext db = new AppDbContext();
   void IActionFilter.OnActionExecuting(ActionExecutingContext  filterContext)
    {
     int userId = AppUserManager.GetUserId();
     var userEntity = db.UserProfiles.FirstOrDefault(t => t.UserId == userId);
     if (userEntity != null)
     {
      //Its means authorized
     }
     else
     {
       HttpContext.Current.Response.Redirect("~/unauthorize/index");
     }
   }
 }

创建后,你可以将它添加到控制器的方法中,像这样:

[HttpGet]
[CheckOwnerActionFilter]
 public void Audittrail()
 {
 }

在此之后,当你请求这个方法时,它将首先进入动作过滤器'CheckOwnerActionFilter',在那里你可以通过userid或其他一些你想要的参数检查授权。它会很好,这也是这类问题的标准格式。

您可以添加一个新函数来检查当前用户是否允许通过此操作:

 public void Audittrail()
    {
        if(isCurrentUserAuthorized())
        {
            try
            {
                AUDITTRAIL audittrail = new AUDITTRAIL();
                audittrail.PROGNAME = "PrimaryMarket";
                audittrail.PROGOPTION = Convert.ToString(Session["PROGOPTION"]);
                audittrail.IOTIME = DateTime.Now;
                audittrail.LOGUSER = Convert.ToDecimal(Session["UserId"]);
                audittrail.IPSMSDATE = db.DTTRACKs.Max(z => z.CURRDATE);
                db.AUDITTRAILs.Add(audittrail);
                db.SaveChanges();
            }
            catch (Exception e)
            {
                ExceptionLogging.SendErrorToText(e);
                Response.Redirect("/Account/Error/");
            }
        }
        else
           Response.Redirect("/Account/Default/");
     }