0

我正在尝试对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 指向 webapi 控制器:

html

<button (click)="takeMove(0)">Up</button>

服务.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,没有运气:

在此处输入图像描述

4

1 回答 1

1

在这种情况下,您真的只想将值发送回 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 })...
于 2018-03-11T13:27:30.507 回答