gpt4 book ai didi

asp.net-mvc - asp.net mvc - 检测页面刷新

转载 作者:行者123 更新时间:2023-12-04 19:51:16 30 4
gpt4 key购买 nike

我知道 StackOverflow 上有类似的问题,但都没有解决我的问题,所以我创建了一个新问题。

正如标题所说,我想检测用户何时刷新页面。我有一个页面,我在其中保存了一些关于用户在上面做了什么的日志信息(比如添加、删除或编辑项目)。此日志只能在用户离开页面时保存,不能通过刷新页面保存。

我尝试了下面的示例来检测它是刷新请求还是新请求:

public ActionResult Index()
{
var Model = new Database().GetLogInfo();
var state = TempData["refresh"];

if(state == null)
{
//This is a mock structure
Model.SaveLog(params);
}


TempData["refresh"] = true; //it can be anything here

return View();
}

考虑到它是一个 TempData,它应该在我的下一个操作时过期。但是,由于某种原因它在整个应用程序中幸存下来。根据这个blog它应该在我随后的请求中过期(除非我不理解某些东西)。即使我从我的应用程序注销并再次登录,我的 TempData 仍然存在。

我一直在考虑使用 javascript 函数 onbeforeunload 对某些操作进行 AJAX 调用,但我不得不再次依赖 TempData 或以某种方式保留此刷新信息。有什么建议吗?

最佳答案

您可以使用如下所示的 ActionFilter:

public class RefreshDetectFilter : IActionFilter
{
public void OnActionExecuting(ActionExecutingContext filterContext)
{
var cookie = filterContext.HttpContext.Request.Cookies["RefreshFilter"];
filterContext.RouteData.Values["IsRefreshed"] = cookie != null &&
cookie.Value == filterContext.HttpContext.Request.Url.ToString();
}
public void OnActionExecuted(ActionExecutedContext filterContext)
{
filterContext.HttpContext.Response.SetCookie(new HttpCookie("RefreshFilter", filterContext.HttpContext.Request.Url.ToString()));
}
}

global.asax 中注册它。然后你可以在你的 Controller 中这样做:

if (RouteData.Values["IsRefreshed"] == true)
{
// page has been refreshed.
}

您可能希望改进检测以检查所使用的 HTTP 方法(因为 POST 和 GET url 看起来可能相同)。请注意,它使用 cookie 进行检测。

关于asp.net-mvc - asp.net mvc - 检测页面刷新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8244437/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com