2016-12-05 5 views
1

Я пытаюсь использовать пост JQuery ajax для вызова основного контроллера ASP.Net. Я пробовал все разные сценарии, но ни один из них не работает. Вот мой Javascript Функция:Ajax Post Request всегда пропускает null Object для MVC Controller

$("#verify-answer").click(function() { 

     if ($("#question_answer").val() != "") { 
      var request = JSON.stringify({ 
       'Answer': $('#question_answer').val(), 
       'UserId': 1, 
       'TenantId': 0 
      }); 

      $.ajax({ 
       url: "/Account/PasswordRecoveryChallengResponseGetToken", 
       type: "POST",    
       contentType: 'application/json', 
       data: request, 
       datatype: "json", 
       success: function (result) { 

        console.log("answer token challenge: "); 

       }, 
       error: function (result) {      
       } 
      }); 
     } 

     return false; 
    }); 

Частичный вид HTML:

<div> 
    <form> 
     <p>Challenge-Response Option</p> 
      <label for="username">Username</label> 
      <input type="text" class="form-control" id="username_recovery"> 
      <button type="submit" id="get-questions" onclick="return false;" >Retrieve Question</button> 
     </form> 
    </div> 


<div id="question"> 
    <div>      
     <form> 
      <div id="user_question"> </div> 
      <label for="username">Answer</label> 
      <input type="text" id="question_answer"> 
      <div id="questions_answer_message"></div> 
      <button type="submit" id="verify-answer">Verify Answer</button> 
     </form> 
    /div> 
    </div> 

Это мой контроллер:

[HttpPost] 
public async Task<IActionResult> PasswordRecoveryChallengResponseGetToken(ResetPasswordQuesionChallengeRequest request) 
{ 

} 

Модель прошла:

public class ResetPasswordQuesionChallengeRequest : Core.TenantClientEntityBase 
{ 

    [Required] 
    public string Answer { get; set; } 
} 


public abstract class TenantClientEntityBase 
{ 
    [Required] 
    public int TenantId { get; set; } 

    [Required] 
    public int UserId { get; set; } 
} 

Это Request Payload :

enter image description here

Параметр запроса всегда следующие значения:

  • Ответ = NULL
  • UserId = 0
  • TenantId = 0

Что я делаю неправильно ?

+0

Не могли бы вы проверить вкладку сети инструментов разработчика (F12) и проверить, что полезная нагрузка запроса соответствует ожиданиям? – Developer

+0

Это полезная нагрузка запроса: '{Ответ:" test ", UserId: 1, TenantId: 0}' – Coding

ответ

2

Я нахожу, что мне нужно положить [FromBody] во все мои POST или я столкнулся с той же проблемой.

например.

public async Task<IActionResult> PasswordRecoveryChallengResponseGetToken([FromBody] ResetPasswordQuesionChallengeRequest request) 
+0

Спасибо! Вы знаете причину этого? – Coding

+0

Это может быть полезно, когда вы получаете данные из нескольких источников, например. – holland1991

+0

, например. Update (Guid id, [FromBody] UpdateData data), но я не уверен, почему он не предполагает FromBody по умолчанию в POSTs ... – holland1991

Смежные вопросы