如果已经回答,请道歉。
我正在尝试确定某个操作的发起人是“点击”还是“导航”;即用户是否实际点击了链接或键入/编辑了网址。
我可以在动作过滤器中使用请求中的任何内容,或者仅此客户端。我正在使用调试工具,我可以在那里看到启动器。
我只希望用户能够访问他们点击链接的操作,而不是直接输入网址然后我可以重定向到另一个页面
答案 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()
{
}