我不确定这是不是解决问题的正确方法.但是,在我创建的OnActionExecuting操作过滤器中,我设置了一个具有不同值的cookie。其中一个值用于确定用户是否首次访问该网站。如果他们是新的访问者,那么我用一些数据设置ViewBag,以便在我的视图中显示这一点。
我的问题是,在我的一些控制器操作中,我执行一个RedirectToAction。结果是OnActionExecuting被触发了两次,一次是针对原始操作,另一次是当它触发新操作时。
<HttpGet()>
Function Index(ByVal PageID As String) As ActionResult
Dim wo As WebPage = Nothing
Try
wp = WebPages.GetWebPage(PageID)
Catch sqlex As SqlException
Throw
Catch ex As Exception
Return RedirectToAction("Index", New With {.PageID = "Home"})
End If
End Try
Return View("WebPage", wp)
End Function这是一个典型的例子。我有一个数据驱动的网站,从数据库中获取一个基于指定的PageID的网页。如果无法在数据库中找到该页,则将用户重定向到主页。
是否有可能防止双重射击反正还是有更好的方式设置一个曲奇?动作过滤器用于多个控制器。
发布于 2014-03-20 20:27:23
您可以在第一次执行时将一些标志值保存到控制器的TempData集合中,如果出现此值,则跳过筛选逻辑:
if (filterContext.Controller.TempData["MyActionFilterAttribute_OnActionExecuting"] == null)
{
filterContext.Controller.TempData["MyActionFilterAttribute_OnActionExecuting"] = true;
}发布于 2015-08-04 15:51:50
也有同样的问题。通过重写属性AllowMultiple解析
public override bool AllowMultiple { get { return false; } }
public override void OnActionExecuting(HttpActionContext actionContext)
{
//your logic here
base.OnActionExecuting(actionContext);
}发布于 2014-03-20 20:17:02
您可以返回实际操作,而不是重定向到新操作。这样,您就不会引发http-请求,从而不会触发onactionexecuting (我相信)
https://stackoverflow.com/questions/22543072
复制相似问题