2016-05-04 10 views
0

MVC6を使用してプロジェクトを開始しましたが、LogOffメソッドにルーティングできないようです。コントローラでLogOffメソッドを呼び出すことができません

アカウントコントローラは次のようになります。

 // 
    // 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"); 
    } 

呼び出すナビゲーションは次のようになります。

@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> 
} 

私は、コントローラのメソッドの最初の行にしてブレークポイントを適用していますしかし、それは決して壊れず、ブラウザは空白になります。

私は間違っていますか?代わりに

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

+0

あなたは、ルーティングテーブルにカスタムルートを追加しましたか? –

+0

リンクはGETメソッドです。 '[HttpPost]'とマークし、 '[ValidateAntiForgeryToken]'を追加して実行されないようにしました。 –

答えて

1

は次のように交換してみてください:

@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

ログオフ作業をしていただきありがとうございますが、私はこれを初めて熟知しており、コードが何をしているのかよくわかりません。私はログオフメニュー項目のスタイルが他のメニュー項目と異なることに気付きました。 – Spionred

+0

これはほとんど必要ありません。メソッドから2つの属性を削除するだけです。 –

+1

あなたの「a」タグを「送信」ボタンに移します。また、あなたのログアウト要求をAntiForgeryTokenを使用してコントローラに送信します。その後、あなたのLogOff関数に '[ValidateAntiForgeryToken]'タグがあるので、コントローラはあなたのAntiForgeryTokenをチェックします。 – kkakkurt

関連する問題