如何阻止用户不访问我的动作在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
使用[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/");
}