0

使用 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());

    }

我尝试在“主页”地图路线之前和之后添加路线。两者似乎都不起作用。我到底在这里想念什么?我已经编写了几十个 asp.net mvc 应用程序并且没有遇到这个问题。这让我大吃一惊。请帮忙。

干杯,~ck

4

3 回答 3

1

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

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

1.) 更改[HttpPost][HttpGet]

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

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

于 2014-03-17T11:36:40.520 回答
0

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

于 2013-03-30T01:33:49.800 回答
0

哦,我正在通过链接点击获取。方法是post。我将链接包装在表单标签中,然后在链接上单击我照常提交表单。这解决了问题,我能够点击我的控制器方法。

于 2013-03-29T23:31:18.047 回答