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

时间:2016-09-19 09:55:51

标签: c# asp.net-mvc asp.net-mvc-5

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

 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 如果用户输入这样的URL http://localhost:49537/Customer/AudiTrail 这个动作被调用, 那么我该怎么做呢? 使用MVC5

3 个答案:

答案 0 :(得分:1)

使用function enable() { document.getElementById("DropDownList1").disabled = false; document.getElementById("DropDownList2").disabled = false; return; } function disable() { document.getElementById("DropDownList1").disabled = true; document.getElementById("DropDownList2").disabled = true; } and pageloadlogic:public partial class _Default : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { } } 属性。这可以通过在浏览器中输入其URL来阻止访问此方法。在您的代码中,您应该使用POST调用它。

对于只返回某些内容的方法使用GET;将POST用于更新内容的方法。

答案 1 :(得分:0)

你可以为此编写一个动作过滤器,我创建了' 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或您想要的其他参数的授权。 它会很好用,对于这类问题,这也是标准格式。

答案 2 :(得分:-1)

您可以添加新功能以检查当前用户是否可以通过此操作:

 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/");

     }