【问题标题】:web api can't fetch complex parameter from client, have to use a dynamic typeweb api 无法从客户端获取复杂参数,必须使用动态类型
【发布时间】:2021-11-07 21:21:30
【问题描述】:

我有一个 aspnet 核心 web api 和一个 angular 客户端。当我想在 web api 中调用方法时,我从客户端发送一个对象,api 将其作为方法参数接收。但在这种情况下,客户端总是在控制台中记录错误“HttpErrorResponse {headers: HttpHeaders, status: 400, statusText: 'OK ...}”。 客户端发送的obj类是:

export class TaskProgress{
    id:string="";
    taskId:string="";
    discription:string="";
    workingHours:number=0;
    status:string=""; 
}

客户端调用:

  createTaskProgress(dto:TaskProgress):Observable<TaskProgress>{
    return this.http.post<TaskProgress>(`${environment.apiUrl}/TaskProgress/Create`,dto);
  }

ViewModel 作为 api 中的参数:

public class TaskProgressDto
{
    public long Id { get; set; }
    public long TaskId { get; set; }
    public string Discription { get; set; }
    public double WorkingHours { get; set; }
    public string Status { get; set; }//committed staged unstaged
}

api控制器中的方法:

    [HttpPost("Create")]
    public async Task<IActionResult> Add(TaskProgressDto dto)
    {

    }

我找到了一个解决方案,可以将替代类 TaskProgressDto 转换为如下动态类型:

[HttpPost("Create")]
public async Task<IActionResult> Add(dynamic dto)
{

}

但是我不知道为什么,我可以只使用明确的类TaskProgressDto吗?

谢谢

【问题讨论】:

    标签: angular asp.net-web-api


    【解决方案1】:

    您从客户端发送的对象与您期望在服务器上的对象之间存在相同的差异。

    export class TaskProgress{
        id:string="";
        taskId:string="";
        discription:string="";
        workingHours:number=0;
        status:string=""; 
    }
    
    public class TaskProgressDto
    {
        public long Id { get; set; }
        public long TaskId { get; set; }
        public string Discription { get; set; }
        public double WorkingHours { get; set; }
        public string Status { get; set; }//committed staged unstaged
    }
    

    您必须尊重相同的参数名称,以及相同的参数类型。 所以,在你的客户端上试试这个,然后改变对象。

      export class TaskProgress {
            Id: number = 1;
            TaskId:number = 2;
            Discription:string = "";
            WorkingHours: number=0;
            Status: string=""; 
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-10-31
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多