1

考虑这个例子:

        public ViewResult View1()
        {
            return View();
        }

        public ViewResult View2()
        {
            return View();
        }

        [HttpPost]
        public ActionResult Processor(SomeModel model)
        {
            if (comeFromView1)
            {

            }
            //implementation
            return RedirectToAction("View3");
        }

View1 和 View2 都有一个发布到处理器的表单。如何在里面检测我来自哪里?

4

1 回答 1

2

一种选择是检查 Request.UrlReferrer。但是,用户可以轻松地欺骗引荐来源网址。

更好的方法是设置前一个动作的动作过滤器。像这样:

public class SavePreviousActionAttribute
{
    public override void OnResultExecuted(ResultExecutedContext filterContext)
    {
        filterContext.HttpContext.Session["PreviousAction"] = filterContext.RouteData["action"]
    }
}

通过将其注册为全局过滤器(在 Global.asax 中)将其添加到所有操作:

GlobalFilters.Filters.Add(new SavePreviousActionAttribute());

然后在您的操作中访问它:

if (Session["PreviousAction"].ToString() == "View1")
{
    // Came from view1
}
于 2013-04-28T19:25:58.323 回答