ASP.NET MVC - 检查启动器的运行情况

时间:2016-12-04 05:04:00

标签: c# asp.net-mvc

如果已经回答,请道歉。

我正在尝试确定某个操作的发起人是“点击”还是“导航”;即用户是否实际点击了链接或键入/编辑了网址。

我可以在动作过滤器中使用请求中的任何内容,或者仅此客户端。我正在使用调试工具,我可以在那里看到启动器。

我只希望用户能够访问他们点击链接的操作,而不是直接输入网址然后我可以重定向到另一个页面

2 个答案:

答案 0 :(得分:1)

调试工具中的Initiator列无法传递到服务器端,它只是由浏览器提供的调试信息。

您可以使用Request.UrlReferrer来确定用户是来自另一个页面(url referer不为null),还是导航(url referer为null)

动作过滤器属性将如下所示:

public class IsRequestFromSameDomainAttribute : ActionFilterAttribute
{
    public override void OnActionExecuting(ActionExecutingContext filterContext)
    {
        if (filterContext.HttpContext.Request.UrlReferrer != null )
        {
            //do something
        }
        else 
        {
            //do something
        }

    }
}

答案 1 :(得分:0)

您可以利用内置防伪令牌。它的工作原理是将值写入客户端的表单,并且具有与服务器端相比较的状态的cookie。如果他们不匹配,请求将失败。

所以,在视图中,

<script>
    function submit(e) {
      if (e.target.className.match(/submit/)) { 
        e.target.form.submit();
      }
    }

    document.body.addEventListener('click', submit);
</script>

@using (Html.BeginForm("url", "protected")) 
{
    @Html.AntiForgeryToken()
    <a class="submit" href="/protected/url">Link</a>
}

动作方法只需要相关的属性

[ValidateAntiForgeryToken]
[HttpPost]
public ActionResult Url()
{
}