首页 > 解决方案 > 为什么我的 Api 控制器中出现错误 500 和来自 ajax 请求的空数据?

问题描述

部分html代码:

<script src="https://code.jquery.com/jquery-3.5.1.min.js"></script>
<h1>Registration</h1>
<form id="loginform">
    <input type="number" name="Id" value="0" id="ID"/><br />
    <p>Имя</p>
    <input type="text" name="Name" id="Name" /><br />
    <p>Ник</p>
    <input type="text" name="NickName" id="NickName" /><br />
    <p>Возраст</p>
    <input type="number" name="Age" id="Age" /><br />
    <p>Почта</p>
    <input type="text" name="Email" id="Email" /><br />
    <p>Пароль</p>
    <input type="text" name="Password" id="Password" /><br />
    <input type="submit" value="отправить" id="Submit" />
</form>

<script>
    function submitForm(form, url) {
// let formData = $(form).serialize();
var person = new Object();
person.Id = $("#ID").val();
person.Name = $("#Name").val();
person.Age = $("#Age").val();
person.NickName = $("#NickName").val();
person.Email = $("#Email").val();
person.Password = $("#Password").val();
        let response = "";
        $.ajax({
            url: url,
            type: "POST",
            data: {user:person},
            contentType: "application/json",
            dataType: "json",
})
        return response;
    }
    $(document).ready(function () {
        $("#Submit").on("click", function (e) {
            e.preventDefault();
            let data = submitForm($("#loginform"), "/api/Test");
            console.log(data);
        });
    });
</script>

API 控制器:

[Route("api/[controller]")]
[ApiController]
public class TestController : ControllerBase
{
    Context db;
    public TestController(Context context)
    {
        db = context;
    }
    [HttpPost]
    public async Task<IActionResult> Registration([FromForm]User user)
    {
        if (ModelState.IsValid)
        {
            db.Users.Add(user);
            await db.SaveChangesAsync();
            return Ok(user);
        }
        return BadRequest(ModelState);
    }
}

用户的简单模型:

    public int Id { get; set; }
    public string Name { get; set; }
    public string NickName { get; set; }
    public string Email { get; set; }
    public int Age { get; set; }
    public string Password { get; set; }

我在函数 submitForm 中尝试过 $(form).serializeArray() 但它在浏览器的控制台中抛出错误 500。我试过 JSON.stringify 和 serializeArray。在哪些情况下不应该使用 [FromForm] 和 [FromBody]?我见过很多没有这个属性的例子

标签: jqueryajaxasp.net-web-api

解决方案


推荐阅读