使用asp.net mvc4。我无法从我的应用程序中点击〜/ Account / LogOff。默认路由应该捕获它并将其路由到适当的控制器。在routeconfig.cs
中routes.MapRoute(
name: "Home",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
不应该抓住网址吗?
链接创建代码
@Html.ActionLink("Signout", "LogOff", "Account" , new{controller = "Account"
, action = "LogOff"}, new{ target = "_self"})
由于某种原因让我发疯,我无法打击
//
// POST: /Account/LogOff
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult LogOff()
{
var fam = FederatedAuthentication.WSFederationAuthenticationModule;
fam.SignOut(false);
SignOutRequestMessage signOutRequest = new SignOutRequestMessage(new Uri(fam.Issuer), fam.Realm);
return new RedirectResult(signOutRequest.WriteQueryString());
}
我尝试在“Home”maproute之前和之后添加一条路线。似乎都没有人工作。我在这里错过了什么?我已经写了几十个asp.net mvc应用程序并没有遇到这个问题。这让我大吃一惊。请帮忙。
干杯, 〜CK
答案 0 :(得分:1)
原因是你有一个[HttpPost]
。它基本上意味着它从表单中提取来自提交按钮的请求,但由于您没有使用提交按钮也不是表单,因此将跳过您的注销操作。
您可以通过以下两个原因解决此问题:
1。)将[HttpPost]
更改为[HttpGet]
2。)只需将您的链接指向您的操作:
@Html.ActionLink("Signout", "LogOff", "Account")
答案 1 :(得分:0)
哦,我正在通过点击链接获取。该方法适用于帖子。我将链接包装在表单标签中,并在链接上单击我像往常一样提交表单。这解决了问题,我能够点击我的控制器方法。
答案 2 :(得分:0)
您需要从[HttpPost]
操作中删除LogOff()
属性。 @Html.ActionLink()
会创建常规链接(<a>
标记),因此点击它会发出GET请求。