未找到asp.net mvc4注销链接路由

时间:2013-03-29 22:59:31

标签: asp.net-mvc asp.net-mvc-4 asp.net-mvc-routing

使用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

3 个答案:

答案 0 :(得分:1)

原因是你有一个[HttpPost]。它基本上意味着它从表单中提取来自提交按钮的请求,但由于您没有使用提交按钮也不是表单,因此将跳过您的注销操作。

您可以通过以下两个原因解决此问题:

1。)将[HttpPost]更改为[HttpGet]

2。)只需将您的链接指向您的操作:

@Html.ActionLink("Signout", "LogOff", "Account")

答案 1 :(得分:0)

哦,我正在通过点击链接获取。该方法适用于帖子。我将链接包装在表单标签中,并在链接上单击我像往常一样提交表单。这解决了问题,我能够点击我的控制器方法。

答案 2 :(得分:0)

您需要从[HttpPost]操作中删除LogOff()属性。 @Html.ActionLink()会创建常规链接(<a>标记),因此点击它会发出GET请求。