我有一个jquery函数:
function ExpireSession() {
$.ajax({
type: "POST",
url: '@Url.Action("LogOffSession","Account")',
dataType: "json",
success: function (data) {
},
error: function (data) {
}
});
}
从上述函数调用的action方法是:
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult LogOffSession()
{
Session.Abandon();
FormsAuthentication.SignOut();
return Json(new { result = true });
}
调用jquery函数(我使用警报测试)但未调用action方法。我尝试过成功和错误功能,但没有效果。
我也尝试过像这样的jquery函数
function ExpireSession() {
var url = '@Url.Action("LogOffSession", "Account")';
$.post(url, null, function (data) {
return true;
});
但仍无效。
我做错了什么?
答案 0 :(得分:0)
该方法失败的原因是在action方法中包含了AntiForgeryToken。删除它可以解决问题。
要在您的操作方法和jquery调用中包含AntiForgeryToken,请检查this。
感谢Stephen Muecke的澄清。
答案 1 :(得分:0)
您可以尝试像默认的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>
}
}
您可以从javascript执行document.getElementById('logoutForm').submit()
注销。不需要在表单中包含注销链接,它可以隐藏。
这照顾了AntiForgeryToken
但是我认为,你不需要使用AntiForgeryToken来保护你的注销方法,你可以删除属性并像现在一样调用url。