【问题标题】:Unsupported Media Type 415, but in Postman works fine不支持的媒体类型 415,但在 Postman 中工作正常
【发布时间】:2020-09-19 21:31:58
【问题描述】:

用户注册后会得到一个链接,链接由userId和token组成。当用户点击它时 - angular 项目打开,然后 angular 从链接中获取 userId 和 token,并将 post 方法发送到后端以验证电子邮件。

链接示例

http://localhost:4200/user/confirmemail/?userId=9bc9a474-d10c-438b-8953-1c32fc57551b&token=Q2ZESjhPRkF6d3BPQ1E5TmtLbWplTnlIZ3g3bzJEVEZQZDQ3MFNSblExaWxBTWh3MmdSMWl2ZkU3djZxcWR3bmY4OFMwd2l6STZOY3VMR2FoZ1ZCM28rWFo1YlJhejhOTE5pamFFdGRETTNiNGttT0lOQ2dZVmdLRVlRdWlKRmtQMVpEWHE0b2t2NVBQZTZ0bkR3cUdrb3JiMWRIQUpRUE5pMTZjTW96YUdJcVZBUUxPSG5pd3NDU3BDeTBNREMvMTVyTlhUNUpCL2tRZTJWMjJlTzVHZ1dDbEh5VWNESGNsNlVTQkpXZ1FJaThDTk1kcUovcmdtV0ZEdEQza2hXR1p6V0pEdz09

Post 方法,用于验证电子邮件:

        [HttpPost("confirmEmail/{userId}")]
        public async Task<IActionResult> ConfirmEmail(string userId, [FromBody]string token)
        {
            var codeDecodedBytes = WebEncoders.Base64UrlDecode(token);
            var codeDecoded = Encoding.UTF8.GetString(codeDecodedBytes);
            var user = await _userManager.FindByIdAsync(userId);
            var result = await _userManager.ConfirmEmailAsync(user, codeDecoded);
            return Ok(result);
        }

它在邮递员中工作正常:

Angular 项目中的错误:

在 Angular 中获取 userId 和 token

  userId: string;
  token: string;
  constructor(private activatedRoute: ActivatedRoute, private authService: AuthService) {
    this.activatedRoute.queryParams.subscribe(params => {
          this.userId = params['userId'];
          this.token = params['token'];
      });
  }

  ngOnInit(): void {
    this.confirmEmail();
  }

  confirmEmail(){
    this.authService.confirmEmail(this.userId, this.token).subscribe(data => { console.log("success")});
  }

(AuthService) 发送数据到后端

  confirmEmail(userId: string, token: string){
    console.log(userId);
    console.log(token);
    return this.http.post(this.authUrl + `confirmemail/${userId}`, token);
  }

【问题讨论】:

    标签: c# angular asp.net-core


    【解决方案1】:

    尝试将Content-Type 设置为json 类型:

    confirmEmail(userId: string, token: string) {
        const body = JSON.stringify(token);
        const options = {
          headers: new HttpHeaders().append('Content-Type', 'application/json')
        };
    
        return this.http.post(this.authUrl + `confirmemail/${userId}`, body, options)
              .pipe(
                  map(res => res)
                , catchError(this.handleError())
              );
    }
    

    【讨论】:

    • 我收到了 BadRequest。
    • @Roomey 尝试设置这样的正文 const body = JSON.stringify(token);
    猜你喜欢
    • 2019-03-23
    • 2021-05-20
    • 1970-01-01
    • 2022-01-15
    • 2014-05-10
    • 2019-05-01
    • 2017-08-17
    相关资源
    最近更新 更多