POST response gives error: "The JSON value could not be converted to api.Models.Account"

POST response gives error: "The JSON value could not be converted to api.Models.Account"

我在向我的 C# .NET 后端控制器发送 JSON POST 请求时遇到错误,这给了我一个 POST 错误代码 400,据我所知意思是不好的请求。 我提示用户(健身房的健身教练)获取新训练课程的信息,看起来像这样(为简洁起见删除了额外的代码):

class Session {
    int SessionID;
    string Title;
    string ExerciseType;
    Account Trainer;
    Account[] Trainees;
    DateTime DateTime;
}

这里是 Account class,和 Session 一样,在错误中提到的 Models 命名空间/目录中:

class Account {
    string Username;
    string Password;
    string FName;
    string LName;
    string Type;
}

我的SessionController的POST方法:

[HttpPost]
public void Post([FromBody] Session session) {
    Console.WriteLine("Post reached. session is " + session.ToString());
}

我知道我的 JSON 格式不正确,无法放入 Session 对象。我的错误告诉我控制器无法接受我的 POST 请求发送的 JSON:

fetch(api/url, {
    method: "POST",
    headers: {
        "Accept": 'application/json',
        "Content-Type": 'application/json'
    },
    body: JSON.stringify({
        Title : title,
        ExerciseType: category,
        Trainer: JSON.stringify({
            Username: sessionStorage.loginUsername,
            Password: null,
            FName: sessionStorage.loginfName,
            LName: sessionStorage.loginlName,
            Type: sessionStorage.loginType
        }),
        DateTime: datetime
    })
}).catch(function(error, cont..));

我试过在某些地方混合使用 JSON.stringify() 而不是其他地方,或者不是全部,但我总是得到 javascript 错误 - 看来这是我能得到的最远的。有人可以帮我将 Account 对象嵌套在会话负载中吗?

编辑:最后,我真的只需要发送主持课程的培训师的用户名。有更简单的方法吗?

我相信最外层对象上的单个 JSON.stringify 应该足以获取 (POST) 请求正文

body: JSON.stringify({
    Title : title,
    ExerciseType: category,
    Trainer: {
        Username: sessionStorage.loginUsername,
        Password: null,
        FName: sessionStorage.loginfName,
        LName: sessionStorage.loginlName,
        Type: sessionStorage.loginType
    },
    DateTime: datetime,
    Duration: duration,
    Capacity: capacity,
    Rate: rate
})

我还注意到您的 json 对象中有一些其他字段在 .NET 模型中不存在,例如持续时间、容量和速率(我建议您确保 .NET 模型也捕获这些).

我刚才重试了,没有错误,我的数据出现在数据库中。不知道之前发生了什么,因为我没有改变任何东西。