Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/75.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jquery Ajax Post请求总是将空对象传递给MVC控制器_Jquery_Json_Asp.net Core_Asp.net Core Mvc - Fatal编程技术网

Jquery Ajax Post请求总是将空对象传递给MVC控制器

Jquery Ajax Post请求总是将空对象传递给MVC控制器,jquery,json,asp.net-core,asp.net-core-mvc,Jquery,Json,Asp.net Core,Asp.net Core Mvc,我试图使用jQueryAJAXPOST调用ASP.Net核心控制器。 我尝试过所有不同的场景,但其中任何一个都不起作用。下面是我的Javascript函数: $("#verify-answer").click(function () { if ($("#question_answer").val() != "") { var request = JSON.stringify({ 'Answer': $('#quest

我试图使用jQueryAJAXPOST调用ASP.Net核心控制器。 我尝试过所有不同的场景,但其中任何一个都不起作用。下面是我的Javascript函数:

   $("#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>
这是请求有效负载:

请求参数始终具有以下值:

  • 答案=空
  • UserId=0
  • 租户=0

我做错了什么?

我发现我必须在所有帖子中添加[FromBody],否则我会遇到同样的问题

e、 g

公共异步任务密码RecoveryChallengResponseGetToken([FromBody]ResetPasswordQuenceChallengeRequest请求)

您能否检查开发人员工具(F12)的网络选项卡并验证请求负载是否符合预期?这是请求负载:
{回答:“测试”,用户ID:1,租户:0}
谢谢!你知道这背后的原因吗?当你从多个来源获取数据时,例如更新(Guid id,[FromBody]UpdateData data),这可能会很有用,但我不确定为什么在POST上默认不使用FromBody…@holland1991:原因之一可能是WebAPI和MVC被合并到一个框架中。以前,MVC和WebApi将从不同的基类继承。现在只有一个类(或者根本没有),有两种主要的方法将模型传递给控制器:主体中的json/xml(对于WebApi来说是典型的)或表单请求(对于MVC来说是典型的)
[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; }
}
public async Task<IActionResult> PasswordRecoveryChallengResponseGetToken([FromBody] ResetPasswordQuesionChallengeRequest request)