我不确定这是否是解决我需要解决的问题的正确方法......但是在我创建的 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 从数据库中获取网页。如果在数据库中找不到该页面,我将用户重定向到主页。
无论如何都可以防止双重触发还是有更好的方法来设置cookie?动作过滤器用于多个控制器。