参数字典包含空值,请求正文中存在参数
Parameters dictionary contains null value, parameter present in request body
我正在尝试 POST
我的 WebAPI 的枚举。请求正文包含我的参数,控制器有一个 [FromBody]
标签。问题是即使参数在正文中,我也会收到空输入错误。
我有以下 api 控制器方法:
public ApiResponse Post([FromBody]Direction d)
{
...
}
其中 Direction
在文件 turtle.cs
的枚举中:
{
public enum Direction { N, S, E, W }
public class Turtle
{
...
}
}
我正在尝试使用以下内容 POST
从 Angular 到网络 api 控制器的方向:
html
<button (click)="takeMove(0)">Up</button>
service.ts
takeMove (d: number): Observable<Object> {
return this.http.post<Object>(this.gameModelUrl, {'d': d}, { headers: this.headers })
.pipe(
tap(gameModel => console.log(`fetched gamedata`)),
catchError(this.handleError('getGameData', {}))
);
}
请求 + Chrome 中的错误:
POST https://localhost:44332/api/tasks 400 ()
MessageDetail: "The parameters dictionary contains a null entry for parameter 'd' of non-nullable type 'TurtleChallenge.Models.Direction' for method 'Models.ApiResponse Post(TurtleChallenge.Models.Direction)' in 'TaskService.Controllers.TasksController'. An optional parameter must be a reference type, a nullable type, or be declared as an optional parameter."
编辑
尝试使用字符串而不是 int,运气不好:
在这种情况下,您实际上只想将值发送回 API,而不是对象。
原因是,API 试图在 Direction
枚举中找到一个名为 d
的 属性,当它尝试绑定值是 gets在请求正文中。如果它没有找到它要找的东西,它只是 returns null.
由于您只是传递一个枚举值,因此您只需将该值作为请求正文包含在内。然后绑定将按预期工作。
所以,而不是像这样 post:
this.http.post<Object>(this.gameModelUrl, {'d': d}, { headers: this.headers })...
你有这个:
this.http.post<Object>(this.gameModelUrl, d, { headers: this.headers })...
我正在尝试 POST
我的 WebAPI 的枚举。请求正文包含我的参数,控制器有一个 [FromBody]
标签。问题是即使参数在正文中,我也会收到空输入错误。
我有以下 api 控制器方法:
public ApiResponse Post([FromBody]Direction d)
{
...
}
其中 Direction
在文件 turtle.cs
的枚举中:
{
public enum Direction { N, S, E, W }
public class Turtle
{
...
}
}
我正在尝试使用以下内容 POST
从 Angular 到网络 api 控制器的方向:
html
<button (click)="takeMove(0)">Up</button>
service.ts
takeMove (d: number): Observable<Object> {
return this.http.post<Object>(this.gameModelUrl, {'d': d}, { headers: this.headers })
.pipe(
tap(gameModel => console.log(`fetched gamedata`)),
catchError(this.handleError('getGameData', {}))
);
}
请求 + Chrome 中的错误:
POST https://localhost:44332/api/tasks 400 ()
MessageDetail: "The parameters dictionary contains a null entry for parameter 'd' of non-nullable type 'TurtleChallenge.Models.Direction' for method 'Models.ApiResponse Post(TurtleChallenge.Models.Direction)' in 'TaskService.Controllers.TasksController'. An optional parameter must be a reference type, a nullable type, or be declared as an optional parameter."
编辑 尝试使用字符串而不是 int,运气不好:
在这种情况下,您实际上只想将值发送回 API,而不是对象。
原因是,API 试图在 Direction
枚举中找到一个名为 d
的 属性,当它尝试绑定值是 gets在请求正文中。如果它没有找到它要找的东西,它只是 returns null.
由于您只是传递一个枚举值,因此您只需将该值作为请求正文包含在内。然后绑定将按预期工作。
所以,而不是像这样 post:
this.http.post<Object>(this.gameModelUrl, {'d': d}, { headers: this.headers })...
你有这个:
this.http.post<Object>(this.gameModelUrl, d, { headers: this.headers })...