2017-06-21 79 views
1

我一直在尝试执行注销操作(使用cookie的表单身份验证),但无法调用POST注销操作方法。ASP.net MVC无法调用POST注销方法

这里是我的局部视图:

<nav class="navbar navbar-inverse" role="navigation"> 
    <div class="container"> 
    <div class="nav navbar-nav navbar-right"> 
     @using (Html.BeginForm("Logoff", "Account", FormMethod.Post, new { id = "logoutForm" })) 
    { 
    @Html.AntiForgeryToken() 
     <a class="navbar-brand" href="javascript:document.getElementById('logoutForm').submit()" title="Logout"> 
     <img alt="Home" src="@Url.Content(" ~/Images/logout.png ")"/> 

     </a> 
     } 

    </div> 

    </div> 

</nav> 

我打电话下面主页这部分查看标题:

<header role="banner"> 

    @Html.Partial("_HomeHeader") 

</header> 

<div class="container"> 
....... 
</div> 

在我的帐户控制器,我定义了以下操作方法:

[HttpPost] 
[ValidateAntiForgeryToken] 
public ActionResult Logoff() 
{  
     FormsAuthentication.SignOut(); 
     Session.Clear(); 
     return Redirect(FormsAuthentication.LoginUrl);     
} 

因此,单击主页上的注销按钮时,应该转到“注销”操作方法并清除cookie,然后重定向到登录页面。 但它不起作用。 而是直接进入登录页面而不访问注销操作方法。我得到这个网址: http://localhost/Account/Login?ReturnUrl=%2FAccount%2FLogoff

任何人都可以请提供他们关于如何实现此功能的输入?

+3

当您尝试访问的页面需要身份验证并且您未经身份验证或权限不足时,通常会获得'/ Account/Login?ReturnUrl = blah'。 –

+0

在这种情况下,'Logoff'操作方法需要身份验证来访问它,并且可能'FormsAuthentication.SignOut()'在注销过程中移除授权cookie - 尝试使用'AllowAnonymousAttribute'标记'Logoff'操作方法。 –

+0

添加[AllowAnonymous]属性为我工作。感谢Tetsuya。 –

回答

-1

尝试下面的代码,希望它有助于。

<a class="navbar-brand" href="javascript:submitform()" title="Logout"> 
    <img alt="Home" src="@Url.Content(" ~/Images/logout.png ")"/> 
    </a> 


<script type="text/javascript"> 
    function submitform() 
    { 
    $("#logoutForm").submit(); 
    } 
</script> 
0

我知道你在这个过程中已经远,但你可以在你的动作控制器...使用WebSecurity方法,而不是你的操作方法(OathWebsecurity,WebSecurity.Logout(); ...等)