我在Home.cshtml中有这个链接(这个ActionResult为__exit__()
)
contextlib.closing()
假设链接到此控制器
with closing((psycopg2.connect(dbase='db', user='zzz')))as conn:
...
我使用此
实现了这一点public ActionResult Home()
和这个
<li class="home-links home-middleLast">@Html.ActionLink("Log out", "LogOut", "Home")</li>
我担心的是有人可以在网址中输入// /LogOut
public ActionResult LogOut()
{
FormsAuthentication.SignOut();
TempData.Clear();
Session.Abandon();
getDB.Close();
return RedirectToAction("Home");
}
,然后会退出该帐户。我怎样才能让人们不这样做呢?
我想这样做,所以你必须点击链接注销,而不是在网址中输入[Route("~/log_out")]
。
答案 0 :(得分:0)
我认为这是一种愚蠢的方式..但你可以试试这个
<li class="home-links home-middleLast"><form action="@Url.Action("LogOut","Home")" method="post"><button type="submit">Log Out</button></form></li>
并在您的操作上方添加[HttpPost]
//LogOut
[HttpPost]
public ActionResult LogOut()
{
FormsAuthentication.SignOut();
TempData.Clear();
Session.Abandon();
getDB.Close();
return RedirectToAction("Home");
}
但是......您必须更改“注销”按钮并将其设置为样式,使其看起来像是与css的链接
答案 1 :(得分:0)
这需要脚本:
public ActionResult LogOut()
{
if (Request.IsAjaxRequest())
{
FormsAuthentication.SignOut();
TempData.Clear();
Session.Abandon();
getDB.Close();
return Json(true, JsonRequestBehavior.AllowGet);
}
return Json("Invalid request", JsonRequestBehavior.AllowGet);
}
和行动:
//one button
var mySingleButton = new THREE.Mesh()
//hide one button
mySingleButton.visible = false
//show one button
mySingleButton.visible = true
答案 2 :(得分:0)
查看
using (Html.BeginForm("LogOut", "Home", FormMethod.Post))
{
<li class="home-links home-middleLast"><input type="submit" value="Log out"/></li>
}
控制器
[HttpPost]
[Route("")]
[Route("~/home")]
public ActionResult LogOut()
{
FormsAuthentication.SignOut();
TempData.Clear();
Session.Abandon();
getDB.Close();
return RedirectToAction("Home");
}
我将主路由放在LogOut控制器上也是HttpPost。这只会在按下按钮时触发。
编辑:我没有使用我之前提交的答案。我实际上使用了这个https://stackoverflow.com/a/14194770/6804700