2017-11-02 18 views
0

私はASP.NET Core Webアプリケーションを持っています。実際のMVCフォームとポストバックを使用するのではなく、純粋なAjaxリクエストで処理する方が好きです。私のコントローラには、ビューを返すアクションと、そのアクションの下のdeleteメソッドのようなアクションがAPIのようなものになっています。ASP.NET MVCコアのAJAX Requestをコントローラに送るときにParamがnullになる

以下のコアでは、正常に動作していますが、idパラメータは常にnullです。私は間違って何をしていますか?

MVCコントローラ:

// POST: Users/Delete/5 
    [HttpPost, ActionName("Delete")] 
    [ValidateAntiForgeryToken] 
    public async Task<IActionResult> Delete([FromBody] string id) 
    { 
     if (!ModelState.IsValid) 
     { 
      return BadRequest(ModelState); 
     } 

     var user = await _userManager.FindByIdAsync(id); 
     if (user == null) 
     { 
      return NotFound(); 
     } 

     await _userManager.DeleteAsync(user); 

     return Ok(user); 
    } 

AJAXリクエスト:

  $.ajax({ 
       url: '@Url.Action("Delete", "Projects")', 
       contentType: "application/json", 
       type: "POST", 
       headers: 
       { 
        "RequestVerificationToken": '@GetAntiXsrfRequestToken()' 
       }, 
       data: JSON.stringify({ "id": "ABC123" }), 
       success: function() { 
        alert('Deleted Successfully'); 
        // Remove row from grid. 
       } 
      }); 

はそれがASPでAjaxリクエストのためのAPIコールのようなより多くの行動の両方のビューを返すアクションとアクションを作成する必要がするのが一般的です.NET MVC Webアプリケーション? AntiForgeryTokenを渡す必要があるため、API呼び出しを検討していません。

+0

はまだ 'null'なのでPARAMです例えば郵便配達員を使用してリクエストしますか? 'URL.Action()'が正しいURLを生成しているかどうかを確認しようとしています。 – Ignas

答えて

1

あなたはJSONオブジェクト{ "id": "ABC123" }を送信し、ので、あなたのアクションメソッドがidプロパティでいくつかの簡単なクラスを期待してください:あなたはポストを作る場合

public class Dto 
{ 
    public int Id {get; set;} 
} 

public async Task<IActionResult> Delete([FromBody] Dto data) 
+0

意味がありますが、コントローラーが単純なIDをパラメーターとして必要としている場合は、何をお勧めしますか?アクションメソッドをタイプDELETEに変更し、そのIDをURLに送信する必要がありますか? –

+0

@BlakeRivell実際には、別のエンドポイントを自由に使用でき、RESTパターンに従う場合は、URLの一部としてidを持つ 'HTTP Delete'メソッドが最も適しています。 – Set

+0

これは基本設定の質問かもしれませんが、純粋なAJAX呼び出しを行い、ビューを返す必要がない場合のASP.NET MVCアプリケーションのようなアクションメソッドを持つことは理にかなっていますか?ビューを返さないもののAPIフォルダを作成することをお勧めしますか? –

関連する問題