我正在从我的SPA回复我的Asp.net控制器。控制器具有以下设置:
[HttpPost]
[AllowAnonymous]
public async Task<IActionResult> Get([FromForm] LoginViewModel model)
{
我的asp.net Core API登录视图模型是:
public class LoginViewModel
{
public string Username { get; set; }
public string Password { get; set; }
}
我的SPA是用Typescript编写的。
我的SPA界面是:
interface userLogin {
Username: string;
Password: string;
}
我将其声明为:
private login: userLogin,
我的FETCH结构如下:
// Lets do a fetch!
console.log("username, password: ", this.username, this.password);
this.login.Username = this.username;
this.login.Password = this.password;
console.log("login.username, login.password", this.login);
console.log("JSON login: ", JSON.stringify(this.login));
const task = fetch("/api/jwt", {
method: "POST",
body: JSON.stringify(this.login),
headers: {
"Content-Type": "application/json;charset=UTF-8"
}
注意:在POSTMAN中设置时,这可以正常工作。
查看这些控制台日志:
username, password: admin password
login.ts:37 login.username, login.password {Username: "admin", Password: "password"}
login.ts:38 JSON login: {Username: "admin", Password: "password"}
以下是Chrome中显示有效负载的网络标签:
最后,控制器在休息时暂停,显示POST的值为null和null:
为什么我在获取POST时变为空?我需要做什么才能让我的API获得值?
答案 0 :(得分:1)
您明确指定contentType为parameter
并发送对象的json字符串化版本。这将在进行异步调用时在请求体中发送数据。因此,您需要使用def function():
global parameter
parameter += 1
属性,以便框架知道如何从包含json格式的js对象/数据的请求中正确地进行模型绑定。
将装饰器属性从application/json
更改为FromBody
FromForm