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 模型也捕获这些).
我刚才重试了,没有错误,我的数据出现在数据库中。不知道之前发生了什么,因为我没有改变任何东西。
我在向我的 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 模型也捕获这些).
我刚才重试了,没有错误,我的数据出现在数据库中。不知道之前发生了什么,因为我没有改变任何东西。