2016-05-04 5 views
0

Ich habe ein Projekt mit MVC6 gestartet und kann anscheinend nicht zur LogOff-Methode weitergeleitet werden.kann die LogOff-Methode im Controller nicht aufrufen

Der Account Controller sieht wie folgt aus:

 // 
    // POST: /Account/LogOff 
    [HttpPost] 
    [ValidateAntiForgeryToken] 
    public async Task<IActionResult> LogOff() 
    { 
     await _signInManager.SignOutAsync(); 
     _logger.LogInformation(4, "User logged out."); 
     return RedirectToAction(nameof(HomeController.Index), "Home"); 
    } 

Der anrufende Navigation wie folgt aussieht:

@if (User.IsSignedIn()) 
{ 
    <div class="profile-picture"> 

     <div class="stats-label text-color"> 
      <span class="font-extra-bold font-uppercase">@User.GetUserName()</span> 

      <div class="dropdown"> 
       <a class="dropdown-toggle" href="#" data-toggle="dropdown"> 
        <small class="text-muted">Title <b class="caret"></b></small> 
       </a> 
       <ul class="dropdown-menu animated flipInX m-t-xs"> 
        <li><a href="@Url.Action("LogOff", "Account")">Log off</a></li> 
        <li><a href="#">Link 2</a></li> 
        <li><a href="#">Link 3</a></li> 
       </ul> 
      </div> 
     </div> 
    </div> 
} 

ich einen Haltepunkt in der in der ersten Zeile des Verfahrens in der Steuerung angelegt haben aber es bricht nie auf und der Browser geht einfach leer.

Was mache ich falsch?

+0

hinzugefügt haben Sie benutzerdefinierte Routen zur Routing-Tabelle? –

+0

Eine Verknüpfung ist eine GET-Methode - Sie haben es markiert "[HttpPost]" und fügte auch hinzu [ValidateAntiForgeryToken] 'so wird es nie ausgeführt werden. –

Antwort

1

Statt

<li><a href="@Url.Action("LogOff", "Account")">Log off</a></li> 

Versuchen wie folgt ersetzt:

@using (Html.BeginForm("LogOff", "Account", FormMethod.Post, new { id = "logoutForm" })) 
            { 
             @Html.AntiForgeryToken() 
             <li><a href="javascript:document.getElementById('logoutForm').submit()">Log off</a></li> 
            } 
+0

Danke, dass die Abmeldung funktioniert, aber ich bin neu und ich bin mir nicht sicher, was Sie tun. Ich stelle fest, dass sich der Menüeintrag Abmelden von anderen Menüelementen unterscheidet. – Spionred

+0

Dies ist kaum notwendig - man braucht nur die 2 Attribute aus der Methode zu entfernen. –

+1

Es überträgt Ihr "a" -Tag in den "Senden" -Button. Und es sendet Ihre Abmeldungsanforderung mit einem AntiForgeryToken an den Controller. Danach überprüft Ihr Controller Ihren AntiForgeryToken, da Ihre LogOff-Funktion den Tag '[ValidateAntiForgeryToken]' hat. – kkakkurt

Verwandte Themen