Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/33.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从Angular 7 SPA到.NET的媒体类型不支持415,而请求在Postman中工作_.net_Angular_Postman_Angular7 - Fatal编程技术网

从Angular 7 SPA到.NET的媒体类型不支持415,而请求在Postman中工作

从Angular 7 SPA到.NET的媒体类型不支持415,而请求在Postman中工作,.net,angular,postman,angular7,.net,Angular,Postman,Angular7,当SPA调用.NET API中的特定端点(我最近添加了分页)时,我得到一个415不支持的媒体类型错误,但是,当我从Postman发出相同的调用时,它成功执行。我不知道为什么SPA会给我一个相同的邮递员电话 我已经从Postman测试了端点,发现它正在工作,并验证了我正在从SPA调用相同的端点 前端呼叫: fetchChanges(page?, itemsPerPage?){ const paginatedResult: PaginatedResult<Change[]>

当SPA调用.NET API中的特定端点(我最近添加了分页)时,我得到一个415不支持的媒体类型错误,但是,当我从Postman发出相同的调用时,它成功执行。我不知道为什么SPA会给我一个相同的邮递员电话

我已经从Postman测试了端点,发现它正在工作,并验证了我正在从SPA调用相同的端点

前端呼叫:

  fetchChanges(page?, itemsPerPage?){
    const paginatedResult: PaginatedResult<Change[]> = new PaginatedResult<Change[]>();

    let params = new HttpParams();

    if (page != null && itemsPerPage != null){
      params = params.append("pageNumber", page);
      params = params.append("pageSize", itemsPerPage);
    }

      return this.http.get(
        this.apiUrl + '/changelog/' + this.model, { observe: "response", params })
        .pipe(
          map((responseData: any) => {
            paginatedResult.result = responseData.body;
            if (responseData.headers.get("Pagination") != null){
              paginatedResult.pagination = JSON.parse(responseData.headers.get("Pagination"));
            }
              return paginatedResult;
          })
        )
  }
端点的控制器函数:


        [HttpGet("{model}")]
        public async Task<IActionResult> GetChangeLog(int userId, string model, ChangeLogParams changeLogParams)
        {
            if (userId != int.Parse(User.FindFirst(ClaimTypes.NameIdentifier).Value))
                return Unauthorized();

            var changeLog = await _repo.GetChangeLog(userId, model, changeLogParams);

            var changeLogForReturn = _mapper.Map<IEnumerable<ChangelogForReturnDto>>(changeLog);

            Response.AddPagination(changeLog.CurrentPage, changeLog.PageSize, changeLog.TotalCount, changeLog.TotalPages);

            return Ok(changeLogForReturn);
        }

我希望前端执行请求,并返回分页结果

应用程序的代码可在此处找到:

在检查了我的标题后,我意识到我在Postman中将内容设置为JSON,这是post/put/patch自动完成的,但当然不是get。这让我意识到我仍然在邮递员中设置了登录请求主体。在清除主体之后,我得到了一个400请求主体不能设置为null的错误,这使我意识到出于某种原因,我的端点希望我的get请求包含一个请求主体

        [HttpGet("{model}")]
        public async Task<IActionResult> GetChangeLog(int userId, string model, ChangeLogParams changeLogParams)
        {
            if (userId != int.Parse(User.FindFirst(ClaimTypes.NameIdentifier).Value))
                return Unauthorized();

            var changeLog = await _repo.GetChangeLog(userId, model, changeLogParams);

            var changeLogForReturn = _mapper.Map<IEnumerable<ChangelogForReturnDto>>(changeLog);

            Response.AddPagination(changeLog.CurrentPage, changeLog.PageSize, changeLog.TotalCount, changeLog.TotalPages);

            return Ok(changeLogForReturn);
        }
回顾代码之后,我发现问题在于后端的ChangeLogParams参数应该作为请求主体

将[FromQuery]添加到ChangeLogParams参数,以从参数而不是请求正文获取分页数据,解决了我的问题

        [HttpGet("{model}")]
        public async Task<IActionResult> GetChangeLog(int userId, string model, [FromQuery]ChangeLogParams changeLogParams)
        {
            if (userId != int.Parse(User.FindFirst(ClaimTypes.NameIdentifier).Value))
                return Unauthorized();

            var changeLog = await _repo.GetChangeLog(userId, model, changeLogParams);

            var changeLogForReturn = _mapper.Map<IEnumerable<ChangelogForReturnDto>>(changeLog);

            Response.AddPagination(changeLog.CurrentPage, changeLog.PageSize, changeLog.TotalCount, changeLog.TotalPages);

            return Ok(changeLogForReturn);
        }

请检查this.model中以下行的值:this.apirl+'/changelog/'+this.model,{observe:response,params}。您是否在前端设置了正确的标题?我看到您在PostMant中设置了4个头Hank you,我决不会在Postman中查看我的头来意识到我正在格式化请求体,并发现我的问题是我的ChangeLogParams参数需要请求体,而不是从我的查询参数获取此数据。