我试图POST
枚举我的WebAPI。请求正文包含我的参数,控制器具有[FromBody]
标记。问题是,即使参数在正文中,我也会收到空条目错误。
我有以下api控制器方法:
public ApiResponse Post([FromBody]Direction d)
{
...
}
Direction
位于文件turtle.cs
的枚举中的位置:
{
public enum Direction { N, S, E, W }
public class Turtle
{
...
}
}
我试图使用以下方法从Angular对{web}控制器的POST
方向进行<button (click)="takeMove(0)">Up</button>
:
HTML
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', {}))
);
}
service.ts
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."
Chrome中的请求+错误:
config/log4j.properties
修改 尝试使用字符串而不是int,没有运气:
答案 0 :(得分:1)
在这种情况下,您实际上只想将值发送回API,而不是对象。
原因是,当API尝试绑定请求正文中的值时,API将尝试在d
枚举中找到名为Direction
的属性。如果它找不到它想要的东西,它只返回null。
由于您只是传递枚举值,因此您只需将这些值包含为请求正文。然后绑定将按预期工作。
所以,而不是这个帖子:
this.http.post<Object>(this.gameModelUrl, {'d': d}, { headers: this.headers })...
你有这个:
this.http.post<Object>(this.gameModelUrl, d, { headers: this.headers })...