Jquery MVC Ajax调用未使用ValidateAntiForgeryToken触发
我有一个jquery函数:Jquery MVC Ajax调用未使用ValidateAntiForgeryToken触发,jquery,ajax,asp.net-mvc,Jquery,Ajax,Asp.net Mvc,我有一个jquery函数: function ExpireSession() { $.ajax({ type: "POST", url: '@Url.Action("LogOffSession","Account")', dataType: "json", success: function (data) { },
function ExpireSession() {
$.ajax({
type: "POST",
url: '@Url.Action("LogOffSession","Account")',
dataType: "json",
success: function (data) {
},
error: function (data) {
}
});
}
从上述函数调用的操作方法是:
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult LogOffSession()
{
Session.Abandon();
FormsAuthentication.SignOut();
return Json(new { result = true });
}
jquery函数已通过警报调用,但未调用操作方法。我尝试在成功和错误函数中给出一些东西,但没有效果
我也尝试过这样给jquery函数
function ExpireSession() {
var url = '@Url.Action("LogOffSession", "Account")';
$.post(url, null, function (data) {
return true;
});
但它仍然不起作用
我做错了什么?该方法失败的原因是action方法中包含了AntiForgeryToken。去掉它就行了 要在操作方法和jquery调用中包含AntiForgeryToken,请签出
感谢Stephen Muecke的澄清。您可以尝试使用默认MVC模板,在页面中包含如下表单:
@if (Request.IsAuthenticated)
{
using (Html.BeginForm(MVC.Account.LogOff(), FormMethod.Post, new { id = "logoutForm" }))
{
@Html.AntiForgeryToken()
<a href="javascript:document.getElementById('logoutForm').submit()">
<i class="fa fa-sign-out"></i> Log out
</a>
}
}
您只需执行document.getElementById'logoutForm'。从javascript提交到注销。不需要在表单中包含注销链接,它可以隐藏。
这会处理好防伪令牌。
但是我认为,您不需要使用AntiForgeryToken保护您的注销方法,您可以删除该属性,然后像现在一样调用url。您的方法用[ValidateAntiForgeryToken]修饰,但您没有传递该标记,因此该方法将永远不会运行。@StephenMuecke是正确的。您可以通过在控制台中检查请求的结果来诊断此类问题。在这种情况下,您很可能会看到一个500错误。是的,您是对的。从操作方法中删除ValidateAntiForgeryToken会执行以下操作。。。