2017-12-13 11 views
0

私はcontrollerを呼び出してURLをリダイレクトしています。 Usercontroller.csは、ClearSessionAnCoodkiesの方法を有する。 このhttpgetメソッドClearSessionAndCookies()のルートを追加しました。セッションクリアのJavaScript呼び出しコントローラが動作しない

コントローラメソッドを呼び出してセッション変数を消去し、彼のホームページにリダイレクトするためにJQueryを使用しました。

何らかの理由で、コールが失敗し、ホームページにリダイレクトされません。

404ページが見つかりません。呼び出しが失敗した理由がわからない:(

The following is the controller, router, and asp.net call 
    ---------- 

    **UserController.cs** 

     [HttpGet] 
      public IHttpActionResult ClearSessionAndCookies() 
      { 
       HttpContext.Current.Session.Clear(); 
       HttpContext.Current.Session.Abandon(); 
       HttpContext.Current.Session.RemoveAll(); 
       var host = Request.RequestUri.GetLeftPart(UriPartial.Authority); 

       return Redirect(host + "/cp");  
      } 

    **Routing** 

     RouteTable.Routes.MapHttpRoute(
        name: "User", 
        routeTemplate: "api/User", 
        defaults: new { action = "ClearSessionAndCookies", controller = "User" } 
       ); 

    **JavaScirpt** 

    function RedirectToWelcomePage() { 
     message = "Session expired. You will be redirected to home page."; 
     $('#sessionTimeoutTitle').text(message); 
     $('#sessionTimeoutModal').modal('show'); 

     var url = 'api/User/ClearSessionAndCookies'; 

      $.post(url, function (res) { 
       if (res.Success) { 
        sessionStorage.clear(); 
        window.location.href = res.RedirectUrl; 
       } 
      });  } 

答えて

0

問題は、あなたが取得し、その後のポストでこれを呼び出しているとしてアクションを宣言していることである。

[HTTPGET] 公共IHttpActionResult ClearSessionAndCookies()

$ .post(URL、機能(RES){

は[HTTPGET]属性を削除し、これは動作します。

+0

ありがとう、マウリ。投稿の代わりに「取得」する必要があります。 –

+0

はい、Ajax呼び出しと宣言は互換性が必要です – Mauri

0

あなたのルートマップは、ユーザーがapi/Userに当たる場合、それはClearSessionAndCookiesを呼ぶと言う。あなたは、URLでアクションをしたい場合は、あなたのルーティングを更新する必要があります。

は、私は非常に彼らは準備にクリーンされているようなルート属性をお勧めします。 https://docs.microsoft.com/en-us/aspnet/core/mvc/controllers/routing

関連する問題