我有以下部分视图,带有Html.FormBegin辅助方法;
@if (Session["UserSpecific"]!=null) //(Request.IsAuthenticated)
{
using (Html.BeginForm("LogOff", "Account", FormMethod.Post, new { id = "logoutForm", @class = "navbar-right" }))
{
@Html.AntiForgeryToken()
@* @Html.ActionLink("Hello " + User.Identity.GetUserName() + "!", "Index", "Manage", routeValues: null, htmlAttributes: new { title = "Manage" })*@
<input type="button" class="menu-button nav navbar-nav navbar-right" data-target=".customer-list" data-toggle="collapse" />
<div class="customer-list-container">
<div class="customer-list collapse">
<ul>
@{
string[] array = { "Steel Company", "Recycling Company", "Other Company", "Random Name Here" };
}
@foreach (string name in array)
{
<li>@Html.ActionLink(name, "", "", routeValues: null, htmlAttributes: new { @class = "customer-link" })</li><hr/>
}
<li><input type="submit" /></li>
</ul>
<div class="col-xs-6">@Html.ActionLink("Settings", "Index", "Manage", routeValues: null, htmlAttributes: new { title = "Manage" })</div><div class="col-xs-6"><!--<input type="submit" value="Log Off"/>-><!--<a href="javascript:document.getElementById('logoutForm').submit()">Log off</a></div><div class="clearfix">--></div>
</div>
</div>
}
}
问题是,每当我点击“提交”按钮而不是注销时,它会再次运行LogIn方法,并将URL修改为:
Account/Login?ReturnUrl=%2FAccount%2FLogOff
我不知道为什么它再次运行LogIn方法,因为Html.BeginForm方法指定它将使用Account控制器中的LogOff方法。
被调用的Login方法:
// GET: /Account/Login
[AllowAnonymous]
public ActionResult Login(string returnUrl)
{
ViewBag.ReturnUrl = returnUrl;
return View();
}
应该调用的LogOff方法:
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult LogOff()
{
//AuthenticationManager.SignOut();
Session.Remove("UserSpecific");
Session["UserSpecific"] = null;
return RedirectToAction("Index", "Home");
}
答案 0 :(得分:0)
您Index
上的HomeController
操作方法似乎没有标记[AllowAnonymous]
属性,这意味着当浏览器在注销后尝试访问它时,它会被重定向到再次登录页面,因为您正在尝试访问只有经过身份验证的用户才能访问的页面。
尝试添加[AllowAnonymous]
:
public class HomeController : Controller {
[AllowAnonymous] // <-- add this
public ActionResult Index() {
return View();
}
// other stuff
}
答案 1 :(得分:0)
我刚刚意识到一些有趣的事情,我在我的MVC区域遇到同样的问题,在帐户控制器中调用索引方法而不是调用注销方法。 我意识到问题在于在应用程序的管理区域中完成了有缺陷的路由。 尝试测试一下,看看你是否能够纠正它。